15b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% texinfo.tex -- TeX macros to handle Texinfo files. 25b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 35b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Load plain if necessary, i.e., if running under initex. 45b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi 55b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 65b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\texinfoversion{2004-11-25.16} 75b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 85b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, 95b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software 105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Foundation, Inc. 115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This texinfo.tex file is free software; you can redistribute it and/or 135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% modify it under the terms of the GNU General Public License as 145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% published by the Free Software Foundation; either version 2, or (at 155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% your option) any later version. 165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This texinfo.tex file is distributed in the hope that it will be 185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% useful, but WITHOUT ANY WARRANTY; without even the implied warranty 195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% General Public License for more details. 215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% You should have received a copy of the GNU General Public License 235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% along with this texinfo.tex file; see the file COPYING. If not, write 245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Boston, MA 02111-1307, USA. 265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% As a special exception, when this file is read by TeX when processing 285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% a Texinfo source document, you may use the result without 295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% restriction. (This has been our intent since Texinfo was invented.) 305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Please try the latest version of texinfo.tex before submitting bug 325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% reports; you can get the latest version from: 335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or 345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% ftp://tug.org/tex/texinfo.tex 355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (and all CTAN mirrors, see http://www.ctan.org). 365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The texinfo.tex in any given distribution could well be out 375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% of date, so if that's what you're using, please check. 385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Send bug reports to bug-texinfo@gnu.org. Please include including a 405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% complete document in each bug report with which we can reproduce the 415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% problem. Patches are, of course, greatly appreciated. 425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% To process a Texinfo manual with TeX, it's most reliable to use the 445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% texi2dvi shell script that comes with the distribution. For a simple 455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% manual foo.texi, however, you can get away with this: 465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% tex foo.texi 475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% texindex foo.?? 485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% tex foo.texi 495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% tex foo.texi 505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% dvips foo.dvi -o # or whatever; this makes foo.ps. 515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The extra TeX runs get the cross-reference information correct. 525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Sometimes one run after texindex suffices, and sometimes you need more 535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% than two; texi2dvi does it as many times as necessary. 545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It is possible to adapt texinfo.tex for other languages, to some 565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% extent. You can get the existing language-specific files from the 575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% full Texinfo distribution. 585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. 605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{Loading texinfo [version \texinfoversion]:} 635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If in a .fmt file, print the version number 655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and turn on active characters that we couldn't do earlier because 665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% they might have appeared in the input file name. 675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\everyjob{\message{[Texinfo version \texinfoversion]}% 685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`+=\active \catcode`\_=\active} 695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{Basics,} 715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\other=12 725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We never want plain's \outer definition of \+ in Texinfo. 745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For @tex, we can use \tabalign. 755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\+ = \relax 765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Save some plain tex macros whose names we will redefine. 785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexb=\b 795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexbullet=\bullet 805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexc=\c 815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexcomma=\, 825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexdot=\. 835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexdots=\dots 845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexend=\end 855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexequiv=\equiv 865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexexclam=\! 875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexfootnote=\footnote 885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexgtr=> 895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexhat=^ 905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexi=\i 915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexindent=\indent 925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexinsert=\insert 935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexlbrace=\{ 945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexless=< 955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexnewwrite\newwrite 965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexnoindent=\noindent 975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexplus=+ 985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexrbrace=\} 995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexslash=\/ 1005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexstar=\* 1015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptext=\t 1025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If this character appears in an error message or help string, it 1045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% starts a new line in the output. 1055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newlinechar = `^^J 1065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Use TeX 3.0's \inputlineno to get the line number, for better error 1085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% messages, but if we're using an old version of TeX, don't do anything. 1095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 1105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\inputlineno\thisisundefined 1115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\linenumber = \empty % Pre-3.0. 1125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\else 1135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\linenumber{l.\the\inputlineno:\space} 1145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi 1155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Set up fixed words for English if not already set. 1175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi 1185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi 1195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi 1205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordin\undefined \gdef\putwordin{in}\fi 1215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi 1225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi 1235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi 1245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi 1255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi 1265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi 1275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordof\undefined \gdef\putwordof{of}\fi 1285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordon\undefined \gdef\putwordon{on}\fi 1295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi 1305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi 1315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi 1325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi 1335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi 1345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi 1355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi 1365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 1375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi 1385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi 1395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi 1405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi 1415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi 1425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi 1435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi 1445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi 1455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi 1465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi 1475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi 1485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi 1495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 1505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi 1515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi 1525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi 1535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi 1545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi 1555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% In some macros, we cannot use the `\? notation---the left quote is 1575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% in some cases the escape char. 1585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\colonChar = `\: 1595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\commaChar = `\, 1605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\dotChar = `\. 1615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\exclamChar= `\! 1625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\questChar = `\? 1635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\semiChar = `\; 1645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\underChar = `\_ 1655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\spaceChar = `\ % 1675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\spacecat = 10 1685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\spaceisspace{\catcode\spaceChar=\spacecat} 1695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Ignore a token. 1715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 1725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\gobble#1{} 1735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The following is used inside several \edef's. 1755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} 1765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Hyphenation fixes. 1785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\hyphenation{ 1795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script 1805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ap-pen-dix bit-map bit-maps 1815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project data-base data-bases eshell fall-ing half-way long-est man-u-script 1825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm 1835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces 1845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project spell-ing spell-ings 1855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project stand-alone strong-est time-stamp time-stamps which-ever white-space 1865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project wide-spread wrap-around 1875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 1885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Margin to add to right of even pages, to left of odd pages. 1905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\bindingoffset 1915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\normaloffset 1925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\pagewidth \newdimen\pageheight 1935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For a final copy, take out the rectangles 1955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% that mark overfull boxes (in case you have decided 1965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% that the text looks ok even though it passes the margin). 1975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 1985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\finalout{\overfullrule=0pt} 1995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 2005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @| inserts a changebar to the left of the current line. It should 2015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% surround any changed text. This approach does *not* work if the 2025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% change spans more than two lines of output. To handle that, we would 2035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% have adopt a much more difficult approach (putting marks into the main 2045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% vertical list for the beginning and end of each change). 2055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 2065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\|{% 2075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \vadjust can only be used in horizontal mode. 2085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \leavevmode 2095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 2105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Append this vertical mode material after the current line in the output. 2115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vadjust{% 2125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We want to insert a rule with the height and depth of the current 2135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % leading; that is exactly what \strutbox is supposed to record. 2145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip-\baselineskip 2155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 2165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \vadjust-items are inserted at the left edge of the type. So 2175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % the \llap here moves out into the left-hand margin. 2185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \llap{% 2195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 2205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % For a thicker or thinner bar, change the `1pt'. 2215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vrule height\baselineskip width1pt 2225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 2235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % This is the space between the bar and the text. 2245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hskip 12pt 2255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 2265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 2275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 2285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 2295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Sometimes it is convenient to have everything in the transcript file 2305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and nothing on the terminal. We don't just call \tracingall here, 2315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% since that produces some useless output on the terminal. We also make 2325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% some effort to order the tracing commands to reduce output in the log 2335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% file; cf. trace.sty in LaTeX. 2345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 2355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% 2365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\loggingall{% 2375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tracingstats2 2385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tracingpages1 2395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tracinglostchars2 % 2 gives us more in etex 2405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tracingparagraphs1 2415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tracingoutput1 2425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tracingmacros2 2435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tracingrestores1 2445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \showboxbreadth\maxdimen \showboxdepth\maxdimen 2455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\eTeXversion\undefined\else % etex gives us more logging 2465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tracingscantokens1 2475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tracingifs1 2485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tracinggroups1 2495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tracingnesting2 2505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tracingassigns1 2515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 2525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tracingcommands3 % 3 gives us more in etex 2535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errorcontextlines16 2545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}% 2555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 2565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% add check for \lastpenalty to plain's definitions. If the last thing 2575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% we did was a \nobreak, we don't want to insert more space. 2585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 2595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount 2605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \removelastskip\penalty-50\smallskip\fi\fi} 2615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount 2625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \removelastskip\penalty-100\medskip\fi\fi} 2635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount 2645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \removelastskip\penalty-200\bigskip\fi\fi} 2655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 2665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For @cropmarks command. 2675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Do @cropmarks to get crop marks. 2685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 2695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifcropmarks 2705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\cropmarks = \cropmarkstrue 2715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 2725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Dimensions to add cropmarks at corners. 2735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Added by P. A. MacKay, 12 Nov. 1986 2745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 2755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines 2765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\cornerlong \cornerlong=1pc 2775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\cornerthick \cornerthick=.3pt 2785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\topandbottommargin \topandbottommargin=.75in 2795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 2805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Main output routine. 2815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\PAGE = 255 2825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\output = {\onepageout{\pagecontents\PAGE}} 2835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 2845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newbox\headlinebox 2855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newbox\footlinebox 2865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 2875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \onepageout takes a vbox as an argument. Note that \pagecontents 2885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% does insertions, but you have to call it yourself. 2895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\onepageout#1{% 2905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi 2915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 2925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifodd\pageno \advance\hoffset by \bindingoffset 2935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else \advance\hoffset by -\bindingoffset\fi 2945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 2955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Do this outside of the \shipout so @code etc. will be expanded in 2965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % the headline as they should be, not taken literally (outputting ''code). 2975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% 2985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% 2995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 3005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 3015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Have to do this stuff outside the \shipout because we want it to 3025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % take effect in \write's, yet the group defined by the \vbox ends 3035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % before the \shipout runs. 3045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 3055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \escapechar = `\\ % use backslash in output files. 3065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \indexdummies % don't expand commands in the output. 3075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \normalturnoffactive % \ in index entries must not stay \, e.g., if 3085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % the page break happens to be in the middle of an example. 3095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \shipout\vbox{% 3105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Do this early so pdf references go to the beginning of the page. 3115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi 3125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 3135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifcropmarks \vbox to \outervsize\bgroup 3145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hsize = \outerhsize 3155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip-\topandbottommargin 3165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vtop to0pt{% 3175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \line{\ewtop\hfil\ewtop}% 3185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nointerlineskip 3195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \line{% 3205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vbox{\moveleft\cornerthick\nstop}% 3215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hfill 3225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vbox{\moveright\cornerthick\nstop}% 3235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 3245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vss}% 3255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip\topandbottommargin 3265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \line\bgroup 3275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hfil % center the page within the outer (page) hsize. 3285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifodd\pageno\hskip\bindingoffset\fi 3295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vbox\bgroup 3305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 3315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 3325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \unvbox\headlinebox 3335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pagebody{#1}% 3345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifdim\ht\footlinebox > 0pt 3355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Only leave this space if the footline is nonempty. 3365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % (We lessened \vsize for it in \oddfootingxxx.) 3375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % The \baselineskip=24pt in plain's \makefootline has no effect. 3385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip 2\baselineskip 3395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \unvbox\footlinebox 3405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 3415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 3425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifcropmarks 3435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \egroup % end of \vbox\bgroup 3445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hfil\egroup % end of (centering) \line\bgroup 3455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip\topandbottommargin plus1fill minus1fill 3465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \boxmaxdepth = \cornerthick 3475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vbox to0pt{\vss 3485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \line{% 3495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vbox{\moveleft\cornerthick\nsbot}% 3505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hfill 3515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vbox{\moveright\cornerthick\nsbot}% 3525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 3535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nointerlineskip 3545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \line{\ewbot\hfil\ewbot}% 3555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 3565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \egroup % \vbox from first cropmarks clause 3575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 3585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% end of \shipout\vbox 3595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% end of group with \normalturnoffactive 3605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advancepageno 3615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\outputpenalty>-20000 \else\dosupereject\fi 3625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 3635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 3645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newinsert\margin \dimen\margin=\maxdimen 3655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 3665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} 3675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\catcode`\@ =11 3685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi 3695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% marginal hacks, juha@viisa.uucp (Juha Takala) 3705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifvoid\margin\else % marginal info is present 3715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi 3725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\dimen@=\dp#1 \unvbox#1 3735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi 3745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifr@ggedbottom \kern-\dimen@ \vfil \fi} 3755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 3765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 3775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Here are the rules for the cropmarks. Note that they are 3785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% offset so that the space between them is truly \outerhsize or \outervsize 3795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (P. A. MacKay, 12 November, 1986) 3805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 3815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} 3825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\nstop{\vbox 3835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\hrule height\cornerthick depth\cornerlong width\cornerthick}} 3845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} 3855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\nsbot{\vbox 3865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\hrule height\cornerlong depth\cornerthick width\cornerthick}} 3875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 3885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Parse an argument, then pass it to #1. The argument is the rest of 3895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the input line (except we remove a trailing comment). #1 should be a 3905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% macro which expects an ordinary undelimited TeX argument. 3915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 3925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\parsearg{\parseargusing{}} 3935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\parseargusing#1#2{% 3945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\next{#2}% 3955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \begingroup 3965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \obeylines 3975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \spaceisspace 3985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project #1% 3995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parseargline\empty% Insert the \empty token, see \finishparsearg below. 4005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 4015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 4025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\obeylines % 4035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\parseargline#1^^M{% 4045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup % End of the group started in \parsearg. 4055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \argremovecomment #1\comment\ArgTerm% 4065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 4075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 4085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 4095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% First remove any @comment, then any @c comment. 4105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} 4115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} 4125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 4135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Each occurence of `\^^M' or `<space>\^^M' is replaced by a single space. 4145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 4155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \argremovec might leave us with trailing space, e.g., 4165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @end itemize @c foo 4175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This space token undergoes the same procedure and is eventually removed 4185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% by \finishparsearg. 4195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 4205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} 4215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} 4225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% 4235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temp{#3}% 4245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\temp\empty 4255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We cannot use \next here, as it holds the macro to run; 4265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % thus we reuse \temp. 4275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\temp\finishparsearg 4285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 4295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\temp\argcheckspaces 4305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 4315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Put the space token in: 4325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \temp#1 #3\ArgTerm 4335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 4345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 4355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If a _delimited_ argument is enclosed in braces, they get stripped; so 4365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to get _exactly_ the rest of the line, we had to prevent such situation. 4375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We prepended an \empty token at the very beginning and we expand it now, 4385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% just before passing the control to \next. 4395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (Similarily, we have to think about #3 of \argcheckspacesY above: it is 4405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% either the null string, or it ends with \^^M---thus there is no danger 4415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% that a pair of braces would be stripped. 4425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 4435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% But first, we have to remove the trailing space token. 4445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 4455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}} 4465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 4475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \parseargdef\foo{...} 4485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% is roughly equivalent to 4495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \def\foo{\parsearg\Xfoo} 4505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \def\Xfoo#1{...} 4515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 4525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my 4535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% favourite TeX trick. --kasal, 16nov03 4545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 4555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\parseargdef#1{% 4565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter \doparseargdef \csname\string#1\endcsname #1% 4575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 4585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doparseargdef#1#2{% 4595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def#2{\parsearg#1}% 4605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def#1##1% 4615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 4625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 4635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Several utility definitions with active space: 4645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{ 4655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \obeyspaces 4665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\obeyedspace{ } 4675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 4685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Make each space character in the input produce a normal interword 4695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % space in the output. Don't allow a line break at this space, as this 4705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % is used only in environments like @example, where each line of input 4715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % should produce a line of output anyway. 4725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 4735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\sepspaces{\obeyspaces\let =\tie} 4745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 4755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If an index command is used in an @example environment, any spaces 4765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % therein should become regular spaces in the raw index file, not the 4775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % expansion of \tie (\leavevmode \penalty \@M \ ). 4785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\unsepspaces{\let =\space} 4795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 4805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 4815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 4825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} 4835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 4845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define the framework for environments in texinfo.tex. It's used like this: 4855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 4865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \envdef\foo{...} 4875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \def\Efoo{...} 4885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 4895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It's the responsibility of \envdef to insert \begingroup before the 4905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% actual body; @end closes the group after calling \Efoo. \envdef also 4915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% defines \thisenv, so the current environment is known; @end checks 4925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% whether the environment name matches. The \checkenv macro can also be 4935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% used to check whether the current environment is the one expected. 4945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 4955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Non-false conditionals (@iftex, @ifset) don't fit into this, so they 4965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% are not treated as enviroments; they don't open a group. (The 4975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% implementation of @end takes care not to call \endgroup in this 4985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% special case.) 4995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 5005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 5015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% At runtime, environments start with this: 5025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\startenvironment#1{\begingroup\def\thisenv{#1}} 5035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% initialize 5045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\thisenv\empty 5055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 5065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% ... but they get defined via ``\envdef\foo{...}'': 5075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\long\def\envdef#1#2{\def#1{\startenvironment#1#2}} 5085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} 5095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 5105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Check whether we're in the right environment: 5115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\checkenv#1{% 5125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temp{#1}% 5135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\thisenv\temp 5145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 5155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \badenverr 5165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 5175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 5185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 5195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Evironment mismatch, #1 expected: 5205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\badenverr{% 5215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errhelp = \EMsimple 5225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errmessage{This command can appear only \inenvironment\temp, 5235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project not \inenvironment\thisenv}% 5245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 5255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\inenvironment#1{% 5265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx#1\empty 5275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project out of any environment% 5285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 5295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project in environment \expandafter\string#1% 5305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 5315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 5325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 5335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @end foo executes the definition of \Efoo. 5345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% But first, it executes a specialized version of \checkenv 5355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 5365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\end{% 5375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \if 1\csname iscond.#1\endcsname 5385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 5395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 5405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\checkenv\csname#1\endcsname 5415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \csname E#1\endcsname 5425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup 5435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 5445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 5455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 5465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newhelp\EMsimple{Press RETURN to continue.} 5475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 5485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 5495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%% Simple single-character @ commands 5505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 5515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @@ prints an @ 5525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Kludge this until the fonts are right (grr). 5535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\@{{\tt\char64}} 5545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 5555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This is turned off because it was never documented 5565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and you can use @w{...} around a quote to suppress ligatures. 5575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%% Define @` and @' to be the same as ` and ' 5585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%% but suppressing ligatures. 5595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%\def\`{{`}} 5605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%\def\'{{'}} 5615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 5625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Used to generate quoted braces. 5635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\mylbrace {{\tt\char123}} 5645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\myrbrace {{\tt\char125}} 5655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\{=\mylbrace 5665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\}=\myrbrace 5675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\begingroup 5685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Definitions to produce \{ and \} commands for indices, 5695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % and @{ and @} for the aux file. 5705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\{ = \other \catcode`\} = \other 5715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\[ = 1 \catcode`\] = 2 5725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\! = 0 \catcode`\\ = \other 5735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project !gdef!lbracecmd[\{]% 5745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project !gdef!rbracecmd[\}]% 5755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project !gdef!lbraceatcmd[@{]% 5765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project !gdef!rbraceatcmd[@}]% 5775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project!endgroup 5785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 5795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @comma{} to avoid , parsing problems. 5805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\comma = , 5815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 5825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent 5835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. 5845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\, = \c 5855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\dotaccent = \. 5865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ringaccent#1{{\accent23 #1}} 5875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\tieaccent = \t 5885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ubaraccent = \b 5895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\udotaccent = \d 5905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 5915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Other special characters: @questiondown @exclamdown @ordf @ordm 5925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. 5935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\questiondown{?`} 5945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\exclamdown{!`} 5955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} 5965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} 5975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 5985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Dotless i and dotless j, used for accents. 5995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\imacro{i} 6005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\jmacro{j} 6015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dotless#1{% 6025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temp{#1}% 6035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\temp\imacro \ptexi 6045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifx\temp\jmacro \j 6055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else \errmessage{@dotless can be used only with i or j}% 6065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi\fi 6075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 6085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 6095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The \TeX{} logo, as in plain, but resetting the spacing so that a 6105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% period following counts as ending a sentence. (Idea found in latex.) 6115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 6125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\edef\TeX{\TeX \spacefactor=1000 } 6135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 6145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @LaTeX{} logo. Not quite the same results as the definition in 6155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% latex.ltx, since we use a different font for the raised A; it's most 6165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% convenient for us to use an explicitly smaller font, rather than using 6175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the \scriptstyle font (since we don't reset \scriptstyle and 6185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \scriptscriptstyle). 6195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 6205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\LaTeX{% 6215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project L\kern-.36em 6225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\setbox0=\hbox{T}% 6235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% 6245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \kern-.15em 6255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \TeX 6265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 6275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 6285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Be sure we're in horizontal mode when doing a tie, since we make space 6295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% equivalent to this in @example-like environments. Otherwise, a space 6305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% at the beginning of a line will start with \penalty -- and 6315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% since \penalty is valid in vertical mode, we'd end up putting the 6325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% penalty on the vertical list instead of in the new paragraph. 6335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\catcode`@ = 11 6345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Avoid using \@M directly, because that causes trouble 6355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % if the definition is written into an index file. 6365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let\tiepenalty = \@M 6375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\tie{\leavevmode\penalty\tiepenalty\ } 6385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 6395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 6405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @: forces normal size whitespace following. 6415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\:{\spacefactor=1000 } 6425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 6435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @* forces a line break. 6445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\*{\hfil\break\hbox{}\ignorespaces} 6455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 6465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @/ allows a line break. 6475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\/=\allowbreak 6485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 6495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @. is an end-of-sentence period. 6505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\.{.\spacefactor=3000 } 6515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 6525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @! is an end-of-sentence bang. 6535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\!{!\spacefactor=3000 } 6545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 6555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @? is an end-of-sentence query. 6565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\?{?\spacefactor=3000 } 6575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 6585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @w prevents a word break. Without the \leavevmode, @w at the 6595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% beginning of a paragraph, when TeX is still in vertical mode, would 6605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% produce a whole line of output instead of starting the paragraph. 6615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\w#1{\leavevmode\hbox{#1}} 6625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 6635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @group ... @end group forces ... to be all on one page, by enclosing 6645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% it in a TeX vbox. We use \vtop instead of \vbox to construct the box 6655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to keep its height that of a normal line. According to the rules for 6665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \topskip (p.114 of the TeXbook), the glue inserted is 6675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% max (\topskip - \ht (first item), 0). If that height is large, 6685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% therefore, no glue is inserted, and the space between the headline and 6695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the text is small, which looks bad. 6705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 6715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Another complication is that the group might be very large. This can 6725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% cause the glue on the previous page to be unduly stretched, because it 6735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% does not have much material. In this case, it's better to add an 6745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% explicit \vfill so that the extra space is at the bottom. The 6755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% threshold for doing this is if the group is more than \vfilllimit 6765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% percent of a page (\vfilllimit can be changed inside of @tex). 6775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 6785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newbox\groupbox 6795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\vfilllimit{0.7} 6805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 6815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\group{% 6825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\catcode`\^^M=\active \else 6835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errhelp = \groupinvalidhelp 6845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errmessage{@group invalid in context where filling is enabled}% 6855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 6865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \startsavinginserts 6875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 6885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox\groupbox = \vtop\bgroup 6895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Do @comment since we are called inside an environment such as 6905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % @example, where each end-of-line in the input causes an 6915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % end-of-line in the output. We don't want the end-of-line after 6925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % the `@group' to put extra space in the output. Since @group 6935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % should appear on a line by itself (according to the Texinfo 6945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % manual), we don't worry about eating any user text. 6955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \comment 6965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 6975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 6985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The \vtop produces a box with normal height and large depth; thus, TeX puts 6995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \baselineskip glue before it, and (when the next line of text is done) 7005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \lineskip glue after it. Thus, space below is not quite equal to space 7015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% above. But it's pretty close. 7025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Egroup{% 7035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % To get correct interline space between the last line of the group 7045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % and the first line afterwards, we have to propagate \prevdepth. 7055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgraf % Not \par, as it may have been set to \lisppar. 7065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\dimen1 = \prevdepth 7075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \egroup % End the \vtop. 7085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \dimen0 is the vertical size of the group's box. 7095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox 7105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \dimen2 is how much space is left on the page (more or less). 7115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dimen2 = \pageheight \advance\dimen2 by -\pagetotal 7125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % if the group doesn't fit on the current page, and it's a big big 7135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % group, force a page break. 7145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifdim \dimen0 > \dimen2 7155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifdim \pagetotal < \vfilllimit\pageheight 7165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \page 7175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 7185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 7195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \box\groupbox 7205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \prevdepth = \dimen1 7215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \checkinserts 7225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 7235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 7245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% TeX puts in an \escapechar (i.e., `@') at the beginning of the help 7255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% message, so this ends up printing `@group can only ...'. 7265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 7275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newhelp\groupinvalidhelp{% 7285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectgroup can only be used in environments such as @example,^^J% 7295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectwhere each line of input produces a line of output.} 7305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 7315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @need space-in-mils 7325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% forces a page break if there is not space-in-mils remaining. 7335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 7345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\mil \mil=0.001in 7355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 7365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Old definition--didn't work. 7375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%\parseargdef\need{\par % 7385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%% This method tries to make TeX break the page naturally 7395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%% if the depth of the box does not fit. 7405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%{\baselineskip=0pt% 7415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak 7425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%\prevdepth=-1000pt 7435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%}} 7445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 7455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\need{% 7465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Ensure vertical mode, so we don't make a big box in the middle of a 7475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % paragraph. 7485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \par 7495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 7505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If the @need value is less than one line space, it's useless. 7515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dimen0 = #1\mil 7525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dimen2 = \ht\strutbox 7535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\dimen2 by \dp\strutbox 7545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifdim\dimen0 > \dimen2 7555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 7565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Do a \strut just to make the height of this box be normal, so the 7575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % normal leading is inserted relative to the preceding line. 7585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % And a page break here is fine. 7595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vtop to #1\mil{\strut\vfil}% 7605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 7615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % TeX does not even consider page breaks if a penalty added to the 7625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % main vertical list is 10000 or more. But in order to see if the 7635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % empty box we just added fits on the page, we must make it consider 7645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % page breaks. On the other hand, we don't want to actually break the 7655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % page after the empty box. So we use a penalty of 9999. 7665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 7675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % There is an extremely small chance that TeX will actually break the 7685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % page at this \penalty, if there are no other feasible breakpoints in 7695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % sight. (If the user is using lots of big @group commands, which 7705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % almost-but-not-quite fill up a page, TeX will have a hard time doing 7715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % good page breaking, for example.) However, I could not construct an 7725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % example where a page broke at this \penalty; if it happens in a real 7735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % document, then we can reconsider our strategy. 7745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \penalty9999 7755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 7765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Back up by the size of the box, whether we did a page break or not. 7775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \kern -#1\mil 7785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 7795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Do not allow a page break right after this kern. 7805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nobreak 7815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 7825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 7835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 7845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @br forces paragraph break (and is undocumented). 7855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 7865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\br = \par 7875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 7885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @page forces the start of a new page. 7895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 7905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\page{\par\vfill\supereject} 7915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 7925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @exdent text.... 7935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% outputs text on separate line in roman font, starting at standard page margin 7945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 7955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This records the amount of indent in the innermost environment. 7965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% That's how much \exdent should take out. 7975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\exdentamount 7985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 7995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This defn is used inside fill environments such as @defun. 8005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} 8015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 8025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This defn is used inside nofill environments such as @example. 8035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount 8045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \leftline{\hskip\leftskip{\rm#1}}}} 8055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 8065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current 8075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% paragraph. For more general purposes, use the \margin insertion 8085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% class. WHICH is `l' or `r'. 8095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 8105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\inmarginspacing \inmarginspacing=1cm 8115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\strutdepth{\dp\strutbox} 8125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 8135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doinmargin#1#2{\strut\vadjust{% 8145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nobreak 8155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \kern-\strutdepth 8165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vtop to \strutdepth{% 8175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \baselineskip=\strutdepth 8185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vss 8195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % if you have multiple lines of stuff to put here, you'll need to 8205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % make the vbox yourself of the appropriate size. 8215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx#1l% 8225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \llap{\ignorespaces #2\hskip\inmarginspacing}% 8235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 8245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% 8255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 8265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \null 8275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 8285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}} 8295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\inleftmargin{\doinmargin l} 8305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\inrightmargin{\doinmargin r} 8315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 8325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @inmargin{TEXT [, RIGHT-TEXT]} 8335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; 8345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% else use TEXT for both). 8355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 8365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\inmargin#1{\parseinmargin #1,,\finish} 8375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. 8385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0 = \hbox{\ignorespaces #2}% 8395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifdim\wd0 > 0pt 8405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\lefttext{#1}% have both texts 8415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\righttext{#2}% 8425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 8435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\lefttext{#1}% have only one text 8445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\righttext{#1}% 8455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 8465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 8475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifodd\pageno 8485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin 8495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 8505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temp{\inleftmargin\lefttext}% 8515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 8525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \temp 8535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 8545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 8555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @include file insert text of that file as input. 8565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 8575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\include{\parseargusing\filenamecatcodes\includezzz} 8585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\includezzz#1{% 8595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pushthisfilestack 8605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\thisfile{#1}% 8615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 8625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \makevalueexpandable 8635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temp{\input #1 }% 8645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter 8655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }\temp 8665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \popthisfilestack 8675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 8685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\filenamecatcodes{% 8695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\\=\other 8705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`~=\other 8715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`^=\other 8725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`_=\other 8735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`|=\other 8745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`<=\other 8755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`>=\other 8765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`+=\other 8775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`-=\other 8785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 8795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 8805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pushthisfilestack{% 8815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\pushthisfilestackX\popthisfilestack\StackTerm 8825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 8835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pushthisfilestackX{% 8845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\pushthisfilestackY\thisfile\StackTerm 8855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 8865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pushthisfilestackY #1\StackTerm #2\StackTerm {% 8875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% 8885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 8895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 8905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\popthisfilestack{\errthisfilestackempty} 8915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\errthisfilestackempty{\errmessage{Internal error: 8925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project the stack of filenames is empty.}} 8935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 8945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\thisfile{} 8955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 8965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @center line 8975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% outputs that line, centered. 8985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 8995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\center{% 9005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifhmode 9015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\next\centerH 9025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 9035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\next\centerV 9045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 9055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \next{\hfil \ignorespaces#1\unskip \hfil}% 9065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 9075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\centerH#1{% 9085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 9095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hfil\break 9105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\hsize by -\leftskip 9115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\hsize by -\rightskip 9125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \line{#1}% 9135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \break 9145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 9155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 9165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} 9175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 9185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @sp n outputs n lines of vertical space 9195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 9205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\sp{\vskip #1\baselineskip} 9215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 9225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @comment ...line which is ignored... 9235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @c is the same as @comment 9245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @ignore ... @end ignore is another way to write a comment 9255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 9265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\comment{\begingroup \catcode`\^^M=\other% 9275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% 9285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\commentxxx} 9295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} 9305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 9315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\c=\comment 9325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 9335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @paragraphindent NCHARS 9345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We'll use ems for NCHARS, close enough. 9355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% NCHARS can also be the word `asis' or `none'. 9365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We cannot feasibly implement @paragraphindent asis, though. 9375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 9385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\asisword{asis} % no translation, these are keywords 9395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\noneword{none} 9405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 9415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\paragraphindent{% 9425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temp{#1}% 9435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\temp\asisword 9445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 9455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\temp\noneword 9465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \defaultparindent = 0pt 9475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 9485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \defaultparindent = #1em 9495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 9505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 9515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parindent = \defaultparindent 9525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 9535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 9545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @exampleindent NCHARS 9555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We'll use ems for NCHARS like @paragraphindent. 9565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It seems @exampleindent asis isn't necessary, but 9575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% I preserve it to make it similar to @paragraphindent. 9585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\exampleindent{% 9595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temp{#1}% 9605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\temp\asisword 9615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 9625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\temp\noneword 9635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \lispnarrowing = 0pt 9645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 9655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \lispnarrowing = #1em 9665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 9675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 9685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 9695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 9705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @firstparagraphindent WORD 9715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If WORD is `none', then suppress indentation of the first paragraph 9725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% after a section heading. If WORD is `insert', then do indent at such 9735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% paragraphs. 9745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 9755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The paragraph indentation is suppressed or not by calling 9765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \suppressfirstparagraphindent, which the sectioning commands do. 9775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We switch the definition of this back and forth according to WORD. 9785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% By default, we suppress indentation. 9795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 9805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} 9815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\insertword{insert} 9825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 9835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\firstparagraphindent{% 9845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temp{#1}% 9855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\temp\noneword 9865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent 9875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifx\temp\insertword 9885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\suppressfirstparagraphindent = \relax 9895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 9905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errhelp = \EMsimple 9915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errmessage{Unknown @firstparagraphindent option `\temp'}% 9925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi\fi 9935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 9945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 9955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Here is how we actually suppress indentation. Redefine \everypar to 9965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \kern backwards by \parindent, and then reset itself to empty. 9975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 9985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We also make \indent itself not actually do anything until the next 9995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% paragraph. 10005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 10015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\dosuppressfirstparagraphindent{% 10025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\indent{% 10035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \restorefirstparagraphindent 10045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \indent 10055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 10065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\noindent{% 10075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \restorefirstparagraphindent 10085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noindent 10095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 10105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\everypar = {% 10115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \kern -\parindent 10125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \restorefirstparagraphindent 10135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 10145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 10155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 10165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\restorefirstparagraphindent{% 10175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global \let \indent = \ptexindent 10185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global \let \noindent = \ptexnoindent 10195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global \everypar = {}% 10205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 10215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 10225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 10235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @asis just yields its argument. Used with @table, for example. 10245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 10255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\asis#1{#1} 10265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 10275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @math outputs its argument in math mode. 10285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 10295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% One complication: _ usually means subscripts, but it could also mean 10305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% an actual _ character, as in @math{@var{some_variable} + 1}. So make 10315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% _ active, and distinguish by seeing if the current family is \slfam, 10325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% which is what @var uses. 10335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{ 10345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode\underChar = \active 10355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\mathunderscore{% 10365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode\underChar=\active 10375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def_{\ifnum\fam=\slfam \_\else\sb\fi}% 10385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } 10395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 10405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Another complication: we want \\ (and @\) to output a \ character. 10415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% FYI, plain.tex uses \\ as a temporary control sequence (why?), but 10425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% this is not advertised and we don't care. Texinfo does not 10435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% otherwise define @\. 10445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 10455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. 10465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} 10475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 10485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\math{% 10495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tex 10505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \mathunderscore 10515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\\ = \mathbackslash 10525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \mathactive 10535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project $\finishmath 10545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 10555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. 10565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 10575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Some active characters (such as <) are spaced differently in math. 10585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We have to reset their definitions in case the @math was an argument 10595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to a command which sets the catcodes (such as @item or @section). 10605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 10615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{ 10625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`^ = \active 10635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`< = \active 10645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`> = \active 10655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`+ = \active 10665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\mathactive{% 10675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let^ = \ptexhat 10685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let< = \ptexless 10695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let> = \ptexgtr 10705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let+ = \ptexplus 10715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } 10725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 10735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 10745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @bullet and @minus need the same treatment as @math, just above. 10755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\bullet{$\ptexbullet$} 10765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\minus{$-$} 10775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 10785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @dots{} outputs an ellipsis using the current font. 10795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We do .5em per period so that it has the same spacing in a typewriter 10805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% font as three actual period characters. 10815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 10825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dots{% 10835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \leavevmode 10845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hbox to 1.5em{% 10855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hskip 0pt plus 0.25fil 10865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project .\hfil.\hfil.% 10875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hskip 0pt plus 0.5fil 10885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 10895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 10905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 10915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @enddots{} is an end-of-sentence ellipsis. 10925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 10935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\enddots{% 10945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dots 10955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \spacefactor=3000 10965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 10975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 10985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @comma{} is so commas can be inserted into text without messing up 10995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Texinfo's parsing. 11005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 11015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\comma = , 11025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 11035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @refill is a no-op. 11045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\refill=\relax 11055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 11065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If working on a large document in chapters, it is convenient to 11075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% be able to disable indexing, cross-referencing, and contents, for test runs. 11085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This is done with @novalidate (before @setfilename). 11095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 11105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\iflinks \linkstrue % by default we want the aux files. 11115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\novalidate = \linksfalse 11125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 11135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @setfilename is done at the beginning of every texinfo file. 11145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% So open here the files we need to have open while reading the input. 11155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This makes it possible to make a .fmt file for texinfo. 11165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setfilename{% 11175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fixbackslash % Turn off hack to swallow `\input texinfo'. 11185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \iflinks 11195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tryauxfile 11205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Open the new aux file. TeX will close it automatically at exit. 11215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \immediate\openout\auxfile=\jobname.aux 11225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi % \openindices needs to do some work in any case. 11235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \openindices 11245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\setfilename=\comment % Ignore extra @setfilename cmds. 11255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 11265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If texinfo.cnf is present on the system, read it. 11275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Useful for site-wide @afourpaper, etc. 11285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \openin 1 texinfo.cnf 11295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifeof 1 \else \input texinfo.cnf \fi 11305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \closein 1 11315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 11325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \comment % Ignore the actual filename. 11335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 11345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 11355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Called from \setfilename. 11365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 11375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\openindices{% 11385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \newindex{cp}% 11395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \newcodeindex{fn}% 11405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \newcodeindex{vr}% 11415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \newcodeindex{tp}% 11425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \newcodeindex{ky}% 11435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \newcodeindex{pg}% 11445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 11455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 11465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @bye. 11475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} 11485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 11495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 11505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{pdf,} 11515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% adobe `portable' document format 11525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\tempnum 11535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\lnkcount 11545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\filename 11555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\filenamelength 11565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\pgn 11575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\toksA 11585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\toksB 11595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\toksC 11605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\toksD 11615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newbox\boxA 11625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\countA 11635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifpdf 11645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifpdfmakepagedest 11655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 11665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 11675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% can be set). So we test for \relax and 0 as well as \undefined, 11685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% borrowed from ifpdf.sty. 11695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\pdfoutput\undefined 11705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\else 11715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\pdfoutput\relax 11725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 11735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifcase\pdfoutput 11745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 11755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pdftrue 11765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 11775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 11785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi 11795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 11805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifpdf 11815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \input pdfcolor 11825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pdfcatalog{/PageMode /UseOutlines}% 11835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\dopdfimage#1#2#3{% 11845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\imagewidth{#2}% 11855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\imageheight{#3}% 11865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % without \immediate, pdftex seg faults when the same image is 11875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) 11885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\pdftexversion < 14 11895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \immediate\pdfimage 11905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 11915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \immediate\pdfximage 11925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 11935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\empty\imagewidth\else width \imagewidth \fi 11945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\empty\imageheight\else height \imageheight \fi 11955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\pdftexversion<13 11965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project #1.pdf% 11975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 11985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {#1.pdf}% 11995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 12005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\pdftexversion < 14 \else 12015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pdfrefximage \pdflastximage 12025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi} 12035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\pdfmkdest#1{{% 12045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We have to set dummies so commands such as @code in a section title 12055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % aren't expanded. 12065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \atdummies 12075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \normalturnoffactive 12085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pdfdest name{#1} xyz% 12095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }} 12105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\pdfmkpgn#1{#1} 12115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\linkcolor = \Blue % was Cyan, but that seems light? 12125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\endlink{\Black\pdfendlink} 12135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Adding outlines to PDF; macros for calculating structure of outlines 12145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % come from Petr Olsak 12155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% 12165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else \csname#1\endcsname \fi} 12175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\advancenumber#1{\tempnum=\expnumber{#1}\relax 12185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\tempnum by 1 12195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\xdef\csname#1\endcsname{\the\tempnum}} 12205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 12215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % #1 is the section text. #2 is the pdf expression for the number 12225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % of subentries (or empty, for subsubsections). #3 is the node 12235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % text, which might be empty if this toc entry had no 12245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % corresponding node. #4 is the page number. 12255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 12265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\dopdfoutline#1#2#3#4{% 12275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Generate a link to the node text if that exists; else, use the 12285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % page number. We could generate a destination for the section 12295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % text in the case where a section has no node, but it doesn't 12305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % seem worthwhile, since most documents are normally structured. 12315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\pdfoutlinedest{#3}% 12325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}\fi 12335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 12345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{#1}% 12355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } 12365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 12375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\pdfmakeoutlines{% 12385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \begingroup 12395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Thanh's hack / proper braces in bookmarks 12405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace 12415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace 12425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 12435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Read toc silently, to get counts of subentries for \pdfoutline. 12445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\numchapentry##1##2##3##4{% 12455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\thischapnum{##2}% 12465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\thissecnum{0}% 12475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\thissubsecnum{0}% 12485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 12495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\numsecentry##1##2##3##4{% 12505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advancenumber{chap\thischapnum}% 12515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\thissecnum{##2}% 12525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\thissubsecnum{0}% 12535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 12545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\numsubsecentry##1##2##3##4{% 12555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advancenumber{sec\thissecnum}% 12565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\thissubsecnum{##2}% 12575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 12585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\numsubsubsecentry##1##2##3##4{% 12595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advancenumber{subsec\thissubsecnum}% 12605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 12615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\thischapnum{0}% 12625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\thissecnum{0}% 12635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\thissubsecnum{0}% 12645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 12655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % use \def rather than \let here because we redefine \chapentry et 12665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % al. a second time, below. 12675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\appentry{\numchapentry}% 12685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\appsecentry{\numsecentry}% 12695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\appsubsecentry{\numsubsecentry}% 12705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\appsubsubsecentry{\numsubsubsecentry}% 12715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\unnchapentry{\numchapentry}% 12725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\unnsecentry{\numsecentry}% 12735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\unnsubsecentry{\numsubsecentry}% 12745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\unnsubsubsecentry{\numsubsubsecentry}% 12755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \input \jobname.toc 12765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 12775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Read toc second time, this time actually producing the outlines. 12785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % The `-' means take the \expnumber as the absolute number of 12795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % subentries, which we calculated on our first read of the .toc above. 12805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 12815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We use the node names as the destinations. 12825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\numchapentry##1##2##3##4{% 12835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% 12845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\numsecentry##1##2##3##4{% 12855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% 12865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\numsubsecentry##1##2##3##4{% 12875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% 12885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\numsubsubsecentry##1##2##3##4{% count is always zero 12895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dopdfoutline{##1}{}{##3}{##4}}% 12905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 12915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % PDF outlines are displayed using system fonts, instead of 12925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % document fonts. Therefore we cannot use special characters, 12935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % since the encoding is unknown. For example, the eogonek from 12945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Latin 2 (0xea) gets translated to a | character. Info from 12955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. 12965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 12975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % xx to do this right, we have to translate 8-bit characters to 12985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % their "best" equivalent, based on the @documentencoding. Right 12995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % now, I guess we'll just let the pdf reader have its way. 13005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \indexnofonts 13015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \turnoffactive 13025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \input \jobname.toc 13035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup 13045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } 13055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 13065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\makelinks #1,{% 13075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\params{#1}\def\E{END}% 13085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\params\E 13095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\nextmakelinks=\relax 13105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 13115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\nextmakelinks=\makelinks 13125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\lnkcount>0,\fi 13135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \picknum{#1}% 13145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \startlink attr{/Border [0 0 0]} 13155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project goto name{\pdfmkpgn{\the\pgn}}% 13165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \linkcolor #1% 13175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\lnkcount by 1% 13185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endlink 13195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 13205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nextmakelinks 13215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } 13225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\picknum#1{\expandafter\pn#1} 13235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\pn#1{% 13245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\p{#1}% 13255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\p\lbrace 13265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\nextpn=\ppn 13275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 13285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\nextpn=\ppnn 13295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\first{#1} 13305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 13315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nextpn 13325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } 13335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\ppn#1{\pgn=#1\gobble} 13345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\ppnn{\pgn=\first} 13355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,} 13365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\skipspaces#1{\def\PP{#1}\def\D{|}% 13375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\PP\D\let\nextsp\relax 13385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\let\nextsp\skipspaces 13395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\p\space\else\addtokens{\filename}{\PP}% 13405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\filenamelength by 1 13415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 13425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 13435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nextsp} 13445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} 13455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\pdftexversion < 14 13465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let \startlink \pdfannotlink 13475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 13485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let \startlink \pdfstartlink 13495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 13505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\pdfurl#1{% 13515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \begingroup 13525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \normalturnoffactive\def\@{@}% 13535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \makevalueexpandable 13545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \leavevmode\Red 13555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \startlink attr{/Border [0 0 0]}% 13565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project user{/Subtype /Link /A << /S /URI /URI (#1) >>}% 13575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup} 13585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} 13595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} 13605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} 13615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} 13625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\maketoks{% 13635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\poptoks\the\toksA|ENDTOKS|\relax 13645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\first0\adn0 13655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 13665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 13675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 13685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 13695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum0=\countA\else\makelink\fi 13705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\first.\let\next=\done\else 13715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\next=\maketoks 13725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \addtokens{\toksB}{\the\toksD} 13735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\first,\addtokens{\toksB}{\space}\fi 13745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 13755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi 13765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \next} 13775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\makelink{\addtokens{\toksB}% 13785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} 13795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\pdflink#1{% 13805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} 13815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \linkcolor #1\endlink} 13825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} 13835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\else 13845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\pdfmkdest = \gobble 13855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\pdfurl = \gobble 13865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\endlink = \relax 13875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\linkcolor = \relax 13885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\pdfmakeoutlines = \relax 13895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi % \ifx\pdfoutput 13905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 13915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 13925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{fonts,} 13935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 13945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Change the current font style to #1, remembering it in \curfontstyle. 13955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in 13965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% italics, not bold italics. 13975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 13985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setfontstyle#1{% 13995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. 14005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \csname ten#1\endcsname % change the current font 14015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 14025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 14035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Select #1 fonts with the current style. 14045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 14055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} 14065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 14075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\rm{\fam=0 \setfontstyle{rm}} 14085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\it{\fam=\itfam \setfontstyle{it}} 14095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\sl{\fam=\slfam \setfontstyle{sl}} 14105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} 14115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\tt{\fam=\ttfam \setfontstyle{tt}} 14125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 14135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Texinfo sort of supports the sans serif font style, which plain TeX does not. 14145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% So we set up a \sf. 14155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newfam\sffam 14165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\sf{\fam=\sffam \setfontstyle{sf}} 14175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\li = \sf % Sometimes we call it \li, not \sf. 14185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 14195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We don't need math for this font style. 14205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ttsl{\setfontstyle{ttsl}} 14215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 14225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Default leading. 14235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\textleading \textleading = 13.2pt 14245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 14255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Set the baselineskip to #1, and the lineskip and strut size 14265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% correspondingly. There is no deep meaning behind these magic numbers 14275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% used as factors; they just match (closely enough) what Knuth defined. 14285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 14295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\lineskipfactor{.08333} 14305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\strutheightpercent{.70833} 14315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\strutdepthpercent {.29167} 14325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 14335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setleading#1{% 14345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \normalbaselineskip = #1\relax 14355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \normallineskip = \lineskipfactor\normalbaselineskip 14365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \normalbaselines 14375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox\strutbox =\hbox{% 14385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vrule width0pt height\strutheightpercent\baselineskip 14395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project depth \strutdepthpercent \baselineskip 14405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 14415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 14425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 14435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Set the font macro #1 to the font named #2, adding on the 14445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% specified font prefix (normally `cm'). 14455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #3 is the font's design size, #4 is a scale factor 14465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} 14475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 14485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Use cm as the default font prefix. 14495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% To specify the font prefix, you must define \fontprefix 14505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% before you read in texinfo.tex. 14515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\fontprefix\undefined 14525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\fontprefix{cm} 14535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi 14545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Support font families that don't use the same naming scheme as CM. 14555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\rmshape{r} 14565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\rmbshape{bx} %where the normal face is bold 14575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\bfshape{b} 14585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\bxshape{bx} 14595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ttshape{tt} 14605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ttbshape{tt} 14615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ttslshape{sltt} 14625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\itshape{ti} 14635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\itbshape{bxti} 14645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\slshape{sl} 14655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\slbshape{bxsl} 14665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\sfshape{ss} 14675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\sfbshape{ss} 14685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\scshape{csc} 14695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\scbshape{csc} 14705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 14715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Text fonts (11.2pt, magstep1). 14725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\textnominalsize{11pt} 14735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\edef\mainmagstep{\magstephalf} 14745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\textrm\rmshape{10}{\mainmagstep} 14755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\texttt\ttshape{10}{\mainmagstep} 14765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\textbf\bfshape{10}{\mainmagstep} 14775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\textit\itshape{10}{\mainmagstep} 14785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\textsl\slshape{10}{\mainmagstep} 14795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\textsf\sfshape{10}{\mainmagstep} 14805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\textsc\scshape{10}{\mainmagstep} 14815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\textttsl\ttslshape{10}{\mainmagstep} 14825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\texti=cmmi10 scaled \mainmagstep 14835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\textsy=cmsy10 scaled \mainmagstep 14845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 14855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% A few fonts for @defun names and args. 14865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\defbf\bfshape{10}{\magstep1} 14875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\deftt\ttshape{10}{\magstep1} 14885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\defttsl\ttslshape{10}{\magstep1} 14895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} 14905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 14915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Fonts for indices, footnotes, small examples (9pt). 14925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smallnominalsize{9pt} 14935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallrm\rmshape{9}{1000} 14945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smalltt\ttshape{9}{1000} 14955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallbf\bfshape{10}{900} 14965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallit\itshape{9}{1000} 14975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallsl\slshape{9}{1000} 14985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallsf\sfshape{9}{1000} 14995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallsc\scshape{10}{900} 15005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallttsl\ttslshape{10}{900} 15015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\smalli=cmmi9 15025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\smallsy=cmsy9 15035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 15045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Fonts for small examples (8pt). 15055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smallernominalsize{8pt} 15065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallerrm\rmshape{8}{1000} 15075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallertt\ttshape{8}{1000} 15085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallerbf\bfshape{10}{800} 15095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallerit\itshape{8}{1000} 15105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallersl\slshape{8}{1000} 15115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallersf\sfshape{8}{1000} 15125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallersc\scshape{10}{800} 15135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallerttsl\ttslshape{10}{800} 15145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\smalleri=cmmi8 15155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\smallersy=cmsy8 15165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 15175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Fonts for title page (20.4pt): 15185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\titlenominalsize{20pt} 15195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\titlerm\rmbshape{12}{\magstep3} 15205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\titleit\itbshape{10}{\magstep4} 15215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\titlesl\slbshape{10}{\magstep4} 15225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\titlett\ttbshape{12}{\magstep3} 15235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\titlettsl\ttslshape{10}{\magstep4} 15245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\titlesf\sfbshape{17}{\magstep1} 15255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\titlebf=\titlerm 15265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\titlesc\scbshape{10}{\magstep4} 15275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\titlei=cmmi12 scaled \magstep3 15285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\titlesy=cmsy10 scaled \magstep4 15295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\authorrm{\secrm} 15305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\authortt{\sectt} 15315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 15325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Chapter (and unnumbered) fonts (17.28pt). 15335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapnominalsize{17pt} 15345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\chaprm\rmbshape{12}{\magstep2} 15355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\chapit\itbshape{10}{\magstep3} 15365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\chapsl\slbshape{10}{\magstep3} 15375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\chaptt\ttbshape{12}{\magstep2} 15385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\chapttsl\ttslshape{10}{\magstep3} 15395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\chapsf\sfbshape{17}{1000} 15405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\chapbf=\chaprm 15415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\chapsc\scbshape{10}{\magstep3} 15425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\chapi=cmmi12 scaled \magstep2 15435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\chapsy=cmsy10 scaled \magstep3 15445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 15455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Section fonts (14.4pt). 15465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\secnominalsize{14pt} 15475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\secrm\rmbshape{12}{\magstep1} 15485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\secit\itbshape{10}{\magstep2} 15495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\secsl\slbshape{10}{\magstep2} 15505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\sectt\ttbshape{12}{\magstep1} 15515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\secttsl\ttslshape{10}{\magstep2} 15525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\secsf\sfbshape{12}{\magstep1} 15535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\secbf\secrm 15545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\secsc\scbshape{10}{\magstep2} 15555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\seci=cmmi12 scaled \magstep1 15565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\secsy=cmsy10 scaled \magstep2 15575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 15585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Subsection fonts (13.15pt). 15595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ssecnominalsize{13pt} 15605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\ssecrm\rmbshape{12}{\magstephalf} 15615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\ssecit\itbshape{10}{1315} 15625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\ssecsl\slbshape{10}{1315} 15635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\ssectt\ttbshape{12}{\magstephalf} 15645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\ssecttsl\ttslshape{10}{1315} 15655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\ssecsf\sfbshape{12}{\magstephalf} 15665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ssecbf\ssecrm 15675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\ssecsc\scbshape{10}{1315} 15685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\sseci=cmmi12 scaled \magstephalf 15695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\ssecsy=cmsy10 scaled 1315 15705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 15715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Reduced fonts for @acro in text (10pt). 15725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\reducednominalsize{10pt} 15735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\reducedrm\rmshape{10}{1000} 15745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\reducedtt\ttshape{10}{1000} 15755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\reducedbf\bfshape{10}{1000} 15765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\reducedit\itshape{10}{1000} 15775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\reducedsl\slshape{10}{1000} 15785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\reducedsf\sfshape{10}{1000} 15795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\reducedsc\scshape{10}{1000} 15805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\reducedttsl\ttslshape{10}{1000} 15815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\reducedi=cmmi10 15825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\reducedsy=cmsy10 15835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 15845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% In order for the font changes to affect most math symbols and letters, 15855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% we have to define the \textfont of the standard families. Since 15865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% texinfo doesn't allow for producing subscripts and superscripts except 15875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% in the main text, we don't bother to reset \scriptfont and 15885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \scriptscriptfont (which would also require loading a lot more fonts). 15895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 15905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\resetmathfonts{% 15915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy 15925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf 15935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \textfont\ttfam=\tentt \textfont\sffam=\tensf 15945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 15955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 15965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The font-changing commands redefine the meanings of \tenSTYLE, instead 15975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% of just \STYLE. We do this because \STYLE needs to also set the 15985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire 15995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \tenSTYLE to set the current font. 16005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 16015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Each font-changing command also sets the names \lsize (one size lower) 16025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and \lllsize (three sizes lower). These relative commands are used in 16035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the LaTeX logo and acronyms. 16045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 16055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This all needs generalizing, badly. 16065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 16075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\textfonts{% 16085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl 16095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc 16105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy 16115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenttsl=\textttsl 16125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\curfontsize{text}% 16135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\lsize{reduced}\def\lllsize{smaller}% 16145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \resetmathfonts \setleading{\textleading}} 16155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\titlefonts{% 16165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl 16175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc 16185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy 16195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenttsl=\titlettsl 16205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\curfontsize{title}% 16215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\lsize{chap}\def\lllsize{subsec}% 16225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \resetmathfonts \setleading{25pt}} 16235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\titlefont#1{{\titlefonts\rm #1}} 16245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapfonts{% 16255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl 16265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc 16275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy 16285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenttsl=\chapttsl 16295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\curfontsize{chap}% 16305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\lsize{sec}\def\lllsize{text}% 16315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \resetmathfonts \setleading{19pt}} 16325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\secfonts{% 16335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl 16345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc 16355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy 16365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenttsl=\secttsl 16375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\curfontsize{sec}% 16385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\lsize{subsec}\def\lllsize{reduced}% 16395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \resetmathfonts \setleading{16pt}} 16405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\subsecfonts{% 16415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl 16425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc 16435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy 16445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenttsl=\ssecttsl 16455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\curfontsize{ssec}% 16465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\lsize{text}\def\lllsize{small}% 16475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \resetmathfonts \setleading{15pt}} 16485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\subsubsecfonts = \subsecfonts 16495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\reducedfonts{% 16505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl 16515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc 16525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy 16535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenttsl=\reducedttsl 16545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\curfontsize{reduced}% 16555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\lsize{small}\def\lllsize{smaller}% 16565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \resetmathfonts \setleading{10.5pt}} 16575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smallfonts{% 16585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl 16595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc 16605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy 16615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenttsl=\smallttsl 16625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\curfontsize{small}% 16635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\lsize{smaller}\def\lllsize{smaller}% 16645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \resetmathfonts \setleading{10.5pt}} 16655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smallerfonts{% 16665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl 16675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc 16685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy 16695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tenttsl=\smallerttsl 16705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\curfontsize{smaller}% 16715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\lsize{smaller}\def\lllsize{smaller}% 16725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \resetmathfonts \setleading{9.5pt}} 16735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 16745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Set the fonts to use with the @small... environments. 16755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\smallexamplefonts = \smallfonts 16765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 16775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample 16785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% can fit this many characters: 16795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 8.5x11=86 smallbook=72 a4=90 a5=69 16805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If we use \scriptfonts (8pt), then we can fit this many characters: 16815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 8.5x11=90+ smallbook=80 a4=90+ a5=77 16825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For me, subjectively, the few extra characters that fit aren't worth 16835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the additional smallness of 8pt. So I'm making the default 9pt. 16845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 16855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% By the way, for comparison, here's what fits with @example (10pt): 16865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 8.5x11=71 smallbook=60 a4=75 a5=58 16875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 16885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% I wish the USA used A4 paper. 16895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% --karl, 24jan03. 16905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 16915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 16925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Set up the default fonts, so we can use them for creating boxes. 16935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 16945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\textfonts \rm 16955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 16965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define these so they can be easily changed for other fonts. 16975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\angleleft{$\langle$} 16985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\angleright{$\rangle$} 16995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 17005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Count depth in font-changes, for error checks 17015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\fontdepth \fontdepth=0 17025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 17035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Fonts for short table of contents. 17045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\shortcontrm\rmshape{12}{1000} 17055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12 17065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\shortcontsl\slshape{12}{1000} 17075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\shortconttt\ttshape{12}{1000} 17085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 17095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%% Add scribe-like font environments, plus @l for inline lisp (usually sans 17105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%% serif) and @ii for TeX italic 17115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 17125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \smartitalic{ARG} outputs arg in italics, followed by an italic correction 17135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% unless the following character is such as not to need one. 17145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else 17155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ptexslash\fi\fi\fi} 17165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} 17175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} 17185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 17195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% like \smartslanted except unconditionally uses \ttsl. 17205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @var is set to this for defun arguments. 17215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} 17225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 17235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% like \smartslanted except unconditionally use \sl. We never want 17245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% ttsl for book titles, do we? 17255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\cite#1{{\sl #1}\futurelet\next\smartitalicx} 17265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 17275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\i=\smartitalic 17285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\slanted=\smartslanted 17295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\var=\smartslanted 17305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\dfn=\smartslanted 17315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\emph=\smartitalic 17325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 17335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @b, explicit bold. 17345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\b#1{{\bf #1}} 17355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\strong=\b 17365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 17375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @sansserif, explicit sans. 17385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\sansserif#1{{\sf #1}} 17395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 17405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We can't just use \exhyphenpenalty, because that only has effect at 17415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the end of a paragraph. Restore normal hyphenation at the end of the 17425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% group within which \nohyphenation is presumably called. 17435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 17445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} 17455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\restorehyphenation{\hyphenchar\font = `- } 17465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 17475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Set sfcode to normal for the chars that usually have another value. 17485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Can't use plain's \frenchspacing because it uses the `\x notation, and 17495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% sometimes \x has an active definition that messes things up. 17505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 17515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`@=11 17525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\frenchspacing{% 17535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m 17545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m 17555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } 17565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`@=\other 17575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 17585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\t#1{% 17595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\tt \rawbackslash \frenchspacing #1}% 17605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \null 17615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 17625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\samp#1{`\tclose{#1}'\null} 17635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\keyrm\rmshape{8}{1000} 17645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\keysy=cmsy9 17655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% 17665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% 17675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vbox{\hrule\kern-0.4pt 17685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% 17695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \kern-0.4pt\hrule}% 17705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \kern-.06em\raise0.4pt\hbox{\angleright}}}} 17715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The old definition, with no lozenge: 17725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} 17735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ctrl #1{{\tt \rawbackslash \hat}#1} 17745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 17755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @file, @option are the same as @samp. 17765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\file=\samp 17775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\option=\samp 17785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 17795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @code is a modification of @t, 17805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% which makes spaces the same size as normal in the surrounding text. 17815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\tclose#1{% 17825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 17835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Change normal interword space to be same as for the current font. 17845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \spaceskip = \fontdimen2\font 17855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 17865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Switch to typewriter. 17875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tt 17885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 17895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % But `\ ' produces the large typewriter interword space. 17905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\ {{\spaceskip = 0pt{} }}% 17915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 17925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Turn off hyphenation. 17935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nohyphenation 17945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 17955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \rawbackslash 17965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \frenchspacing 17975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project #1% 17985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 17995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \null 18005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 18015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 18025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We *must* turn on hyphenation at `-' and `_' in @code. 18035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Otherwise, it is too hard to avoid overfull hboxes 18045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% in the Emacs manual, the Library manual, etc. 18055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 18065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Unfortunately, TeX uses one parameter (\hyphenchar) to control 18075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% both hyphenation at - and hyphenation within words. 18085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We must therefore turn them both off (\tclose does that) 18095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and arrange explicitly to hyphenate at a dash. 18105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% -- rms. 18115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{ 18125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\-=\active 18135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\_=\active 18145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 18155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\def\code{\begingroup 18165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\-=\active \let-\codedash 18175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\_=\active \let_\codeunder 18185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \codex 18195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } 18205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 18215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 18225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\realdash{-} 18235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\codedash{-\discretionary{}{}{}} 18245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\codeunder{% 18255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % this is all so @math{@code{var_name}+1} can work. In math mode, _ 18265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) 18275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % will therefore expand the active definition of _, which is us 18285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % (inside @code that is), therefore an endless loop. 18295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifusingtt{\ifmmode 18305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. 18315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\normalunderscore \fi 18325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \discretionary{}{}{}}% 18335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\_}% 18345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 18355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\codex #1{\tclose{#1}\endgroup} 18365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 18375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @kbd is like @code, except that if the argument is just one @key command, 18385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% then @kbd has no effect. 18395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 18405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), 18415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% `example' (@kbd uses ttsl only inside of @example and friends), 18425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% or `code' (@kbd uses normal tty font always). 18435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\kbdinputstyle{% 18445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\arg{#1}% 18455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\arg\worddistinct 18465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% 18475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifx\arg\wordexample 18485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% 18495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifx\arg\wordcode 18505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% 18515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 18525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errhelp = \EMsimple 18535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errmessage{Unknown @kbdinputstyle option `\arg'}% 18545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi\fi\fi 18555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 18565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\worddistinct{distinct} 18575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\wordexample{example} 18585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\wordcode{code} 18595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 18605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Default is `distinct.' 18615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\kbdinputstyle distinct 18625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 18635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\xkey{\key} 18645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% 18655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\one\xkey\ifx\threex\three \key{#2}% 18665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\else{\tclose{\kbdfont\look}}\fi 18675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\else{\tclose{\kbdfont\look}}\fi} 18685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 18695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For @indicateurl, @env, @command quotes seem unnecessary, so use \code. 18705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\indicateurl=\code 18715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\env=\code 18725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\command=\code 18735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 18745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @uref (abbreviation for `urlref') takes an optional (comma-separated) 18755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% second argument specifying the text to display and an optional third 18765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% arg as text to display instead of (rather than in addition to) the url 18775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% itself. First (mandatory) arg is the url. Perhaps eventually put in 18785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% a hypertex \special here. 18795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 18805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\uref#1{\douref #1,,,\finish} 18815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\douref#1,#2,#3,#4\finish{\begingroup 18825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \unsepspaces 18835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pdfurl{#1}% 18845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0 = \hbox{\ignorespaces #3}% 18855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifdim\wd0 > 0pt 18865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \unhbox0 % third arg given, show only that 18875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 18885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0 = \hbox{\ignorespaces #2}% 18895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifdim\wd0 > 0pt 18905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifpdf 18915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \unhbox0 % PDF: 2nd arg given, show only it 18925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 18935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url 18945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 18955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 18965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \code{#1}% only url given, so show it 18975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 18985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 18995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endlink 19005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup} 19015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 19025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @url synonym for @uref, since that's how everyone uses it. 19035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 19045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\url=\uref 19055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 19065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% rms does not like angle brackets --karl, 17may97. 19075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% So now @email is just like @uref, unless we are pdf. 19085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 19095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%\def\email#1{\angleleft{\tt #1}\angleright} 19105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifpdf 19115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\email#1{\doemail#1,,\finish} 19125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\doemail#1,#2,#3\finish{\begingroup 19135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \unsepspaces 19145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pdfurl{mailto:#1}% 19155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0 = \hbox{\ignorespaces #2}% 19165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi 19175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endlink 19185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup} 19195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\else 19205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\email=\uref 19215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi 19225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 19235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Check if we are currently using a typewriter font. Since all the 19245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Computer Modern typewriter fonts have zero interword stretch (and 19255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% shrink), and it is reasonable to expect all typewriter fonts to have 19265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% this property, we can check that font parameter. 19275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 19285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifmonospace{\ifdim\fontdimen3\font=0pt } 19295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 19305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Typeset a dimension, e.g., `in' or `pt'. The only reason for the 19315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. 19325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 19335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dmn#1{\thinspace #1} 19345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 19355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} 19365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 19375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @l was never documented to mean ``switch to the Lisp font'', 19385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and it is not used as such in any manual I can find. We need it for 19395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Polish suppressed-l. --karl, 22sep96. 19405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%\def\l#1{{\li #1}\null} 19415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 19425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Explicit font changes: @r, @sc, undocumented @ii. 19435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\r#1{{\rm #1}} % roman font 19445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\sc#1{{\smallcaps#1}} % smallcaps font 19455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ii#1{{\it #1}} % italic font 19465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 19475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @acronym for "FBI", "NATO", and the like. 19485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We print this one point size smaller, since it's intended for 19495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% all-uppercase. 19505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 19515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\acronym#1{\doacronym #1,,\finish} 19525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doacronym#1,#2,#3\finish{% 19535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\selectfonts\lsize #1}% 19545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temp{#2}% 19555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\temp\empty \else 19565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \space ({\unsepspaces \ignorespaces \temp \unskip})% 19575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 19585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 19595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 19605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @abbr for "Comput. J." and the like. 19615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% No font change, but don't do end-of-sentence spacing. 19625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 19635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\abbr#1{\doabbr #1,,\finish} 19645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doabbr#1,#2,#3\finish{% 19655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\frenchspacing #1}% 19665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temp{#2}% 19675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\temp\empty \else 19685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \space ({\unsepspaces \ignorespaces \temp \unskip})% 19695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 19705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 19715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 19725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @pounds{} is a sterling sign, which Knuth put in the CM italic font. 19735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 19745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pounds{{\it\$}} 19755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 19765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @euro{} comes from a separate font, depending on the current style. 19775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We use the free feym* fonts from the eurosym package by Henrik 19785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Theiling, which support regular, slanted, bold and bold slanted (and 19795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% "outlined" (blackboard board, sort of) versions, which we don't need). 19805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. 19815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 19825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Although only regular is the truly official Euro symbol, we ignore 19835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% that. The Euro is designed to be slightly taller than the regular 19845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% font height. 19855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 19865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% feymr - regular 19875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% feymo - slanted 19885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% feybr - bold 19895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% feybo - bold slanted 19905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 19915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% There is no good (free) typewriter version, to my knowledge. 19925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. 19935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Hmm. 19945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 19955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Also doesn't work in math. Do we need to do math with euro symbols? 19965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Hope not. 19975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 19985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 19995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\euro{{\eurofont e}} 20005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\eurofont{% 20015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We set the font at each command, rather than predefining it in 20025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \textfonts and the other font-switching commands, so that 20035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % installations which never need the symbold don't have to have the 20045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % font installed. 20055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 20065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % There is only one designed size (nominal 10pt), so we always scale 20075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % that to the current nominal size. 20085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 20095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % By the way, simply using "at 1em" works for cmr10 and the like, but 20105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % does not work for cmbx10 and other extended/shrunken fonts. 20115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 20125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\eurosize{\csname\curfontsize nominalsize\endcsname}% 20135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 20145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\curfontstyle\bfstylename 20155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % bold: 20165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize 20175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 20185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % regular: 20195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize 20205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 20215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \thiseurofont 20225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 20235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 20245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @registeredsymbol - R in a circle. The font for the R should really 20255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% be smaller yet, but lllsize is the best we can do for now. 20265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Adapted from the plain.tex definition of \copyright. 20275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 20285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\registeredsymbol{% 20295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% 20305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hfil\crcr\Orb}}% 20315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }$% 20325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 20335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 20345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Laurent Siebenmann reports \Orb undefined with: 20355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 20365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% so we'll define it if necessary. 20375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 20385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\Orb\undefined 20395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Orb{\mathhexbox20D} 20405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi 20415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 20425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 20435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{page headings,} 20445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 20455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\titlepagetopglue \titlepagetopglue = 1.5in 20465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\titlepagebottomglue \titlepagebottomglue = 2pc 20475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 20485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% First the title page. Must do @settitle before @titlepage. 20495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifseenauthor 20505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\iffinishedtitlepage 20515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 20525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Do an implicit @contents or @shortcontents after @end titlepage if the 20535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. 20545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 20555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifsetcontentsaftertitlepage 20565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue 20575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifsetshortcontentsaftertitlepage 20585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue 20595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 20605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% 20615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup\page\hbox{}\page} 20625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 20635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\titlepage{% 20645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Open one extra group, as we want to close it in the middle of \Etitlepage. 20655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \begingroup 20665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parindent=0pt \textfonts 20675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Leave some space at the very top of the page. 20685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vglue\titlepagetopglue 20695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % No rule at page bottom unless we print one at the top with @title. 20705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \finishedtitlepagetrue 20715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 20725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Most title ``pages'' are actually two pages long, with space 20735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % at the top of the second. We don't want the ragged left on the second. 20745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\oldpage = \page 20755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\page{% 20765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \iffinishedtitlepage\else 20775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \finishtitlepage 20785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 20795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\page = \oldpage 20805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \page 20815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \null 20825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 20835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 20845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 20855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Etitlepage{% 20865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \iffinishedtitlepage\else 20875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \finishtitlepage 20885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 20895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % It is important to do the page break before ending the group, 20905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % because the headline and footline are only empty inside the group. 20915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If we use the new definition of \page, we always get a blank page 20925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % after the title page, which we certainly don't want. 20935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \oldpage 20945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup 20955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 20965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Need this before the \...aftertitlepage checks so that if they are 20975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % in effect the toc pages will come out with page numbers. 20985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \HEADINGSon 20995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 21005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If they want short, they certainly want long too. 21015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifsetshortcontentsaftertitlepage 21025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \shortcontents 21035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \contents 21045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let\shortcontents = \relax 21055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let\contents = \relax 21065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 21075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 21085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifsetcontentsaftertitlepage 21095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \contents 21105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let\contents = \relax 21115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let\shortcontents = \relax 21125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 21135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 21145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 21155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\finishtitlepage{% 21165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip4pt \hrule height 2pt width \hsize 21175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip\titlepagebottomglue 21185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \finishedtitlepagetrue 21195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 21205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 21215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%%% Macros to be used within @titlepage: 21225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 21235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\subtitlerm=\tenrm 21245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} 21255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 21265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines 21275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tt=\authortt} 21285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 21295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\title{% 21305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \checkenv\titlepage 21315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \leftline{\titlefonts\rm #1} 21325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % print a rule at the page bottom also. 21335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \finishedtitlepagefalse 21345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip4pt \hrule height 4pt width \hsize \vskip4pt 21355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 21365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 21375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\subtitle{% 21385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \checkenv\titlepage 21395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\subtitlefont \rightline{#1}}% 21405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 21415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 21425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @author should come last, but may come many times. 21435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It can also be used inside @quotation. 21445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 21455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\author{% 21465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temp{\quotation}% 21475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\thisenv\temp 21485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\quotationauthor{#1}% printed in \Equotation. 21495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 21505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \checkenv\titlepage 21515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi 21525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\authorfont \leftline{#1}}% 21535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 21545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 21555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 21565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 21575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%%% Set up page headings and footings. 21585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 21595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\thispage=\folio 21605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 21615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\evenheadline % headline on even pages 21625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\oddheadline % headline on odd pages 21635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\evenfootline % footline on even pages 21645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\oddfootline % footline on odd pages 21655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 21665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Now make TeX use those variables 21675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline 21685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else \the\evenheadline \fi}} 21695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline 21705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else \the\evenfootline \fi}\HEADINGShook} 21715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\HEADINGShook=\relax 21725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 21735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Commands to set those variables. 21745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For example, this is what @headings on does 21755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @evenheading @thistitle|@thispage|@thischapter 21765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @oddheading @thischapter|@thispage|@thistitle 21775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @evenfooting @thisfile|| 21785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @oddfooting ||@thisfile 21795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 21805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 21815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\evenheading{\parsearg\evenheadingxxx} 21825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} 21835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\evenheadingyyy #1\|#2\|#3\|#4\finish{% 21845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} 21855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 21865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\oddheading{\parsearg\oddheadingxxx} 21875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} 21885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\oddheadingyyy #1\|#2\|#3\|#4\finish{% 21895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} 21905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 21915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% 21925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 21935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\evenfooting{\parsearg\evenfootingxxx} 21945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} 21955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\evenfootingyyy #1\|#2\|#3\|#4\finish{% 21965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} 21975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 21985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\oddfooting{\parsearg\oddfootingxxx} 21995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} 22005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\oddfootingyyy #1\|#2\|#3\|#4\finish{% 22015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% 22025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 22035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Leave some space for the footline. Hopefully ok to assume 22045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % @evenfooting will not be used by itself. 22055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\advance\pageheight by -\baselineskip 22065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\advance\vsize by -\baselineskip 22075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 22085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 22095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} 22105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 22115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 22125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @headings double turns headings on for double-sided printing. 22135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @headings single turns headings on for single-sided printing. 22145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @headings off turns them off. 22155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @headings on same as @headings double, retained for compatibility. 22165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @headings after turns on double-sided headings after this page. 22175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @headings doubleafter turns on double-sided headings after this page. 22185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @headings singleafter turns on single-sided headings after this page. 22195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% By default, they are off at the start of a document, 22205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and turned `on' after @end titlepage. 22215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 22225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\headings #1 {\csname HEADINGS#1\endcsname} 22235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 22245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\HEADINGSoff{% 22255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenheadline={\hfil} \global\evenfootline={\hfil} 22265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddheadline={\hfil} \global\oddfootline={\hfil}} 22275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\HEADINGSoff 22285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% When we turn headings on, set the page number to 1. 22295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For double-sided printing, put current file name in lower left corner, 22305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% chapter name on inside top of right hand pages, document 22315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% title on inside top of left hand pages, and page numbers on outside top 22325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% edge of all pages. 22335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\HEADINGSdouble{% 22345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\pageno=1 22355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenfootline={\hfil} 22365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddfootline={\hfil} 22375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenheadline={\line{\folio\hfil\thistitle}} 22385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddheadline={\line{\thischapter\hfil\folio}} 22395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\contentsalignmacro = \chapoddpage 22405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 22415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\contentsalignmacro = \chappager 22425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 22435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For single-sided printing, chapter title goes across top left of page, 22445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% page number on top right. 22455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\HEADINGSsingle{% 22465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\pageno=1 22475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenfootline={\hfil} 22485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddfootline={\hfil} 22495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenheadline={\line{\thischapter\hfil\folio}} 22505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddheadline={\line{\thischapter\hfil\folio}} 22515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\contentsalignmacro = \chappager 22525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 22535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\HEADINGSon{\HEADINGSdouble} 22545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 22555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} 22565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\HEADINGSdoubleafter=\HEADINGSafter 22575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\HEADINGSdoublex{% 22585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenfootline={\hfil} 22595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddfootline={\hfil} 22605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenheadline={\line{\folio\hfil\thistitle}} 22615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddheadline={\line{\thischapter\hfil\folio}} 22625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\contentsalignmacro = \chapoddpage 22635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 22645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 22655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} 22665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\HEADINGSsinglex{% 22675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenfootline={\hfil} 22685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddfootline={\hfil} 22695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenheadline={\line{\thischapter\hfil\folio}} 22705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddheadline={\line{\thischapter\hfil\folio}} 22715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\contentsalignmacro = \chappager 22725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 22735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 22745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Subroutines used in generating headings 22755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This produces Day Month Year style of output. 22765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Only define if not already defined, in case a txi-??.tex file has set 22775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% up a different format (e.g., txi-cs.tex does this). 22785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\today\undefined 22795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\today{% 22805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \number\day\space 22815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifcase\month 22825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr 22835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug 22845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec 22855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 22865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \space\number\year} 22875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi 22885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 22895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @settitle line... specifies the title of the document, for headings. 22905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It generates no output of its own. 22915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\thistitle{\putwordNoTitle} 22925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\settitle{\parsearg{\gdef\thistitle}} 22935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 22945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 22955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{tables,} 22965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Tables -- @table, @ftable, @vtable, @item(x). 22975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 22985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% default indentation of table text 22995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\tableindent \tableindent=.8in 23005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% default indentation of @itemize and @enumerate text 23015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\itemindent \itemindent=.3in 23025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% margin between end of table item and start of table text. 23035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\itemmargin \itemmargin=.1in 23045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 23055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% used internally for \itemindent minus \itemmargin 23065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\itemmax 23075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 23085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Note @table, @ftable, and @vtable define @item, @itemx, etc., with 23095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% these defs. 23105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% They also define \itemindex 23115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to index the item name in whatever manner is desired (perhaps none). 23125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 23135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifitemxneedsnegativevskip 23145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 23155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} 23165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 23175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\internalBitem{\smallbreak \parsearg\itemzzz} 23185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\internalBitemx{\itemxpar \parsearg\itemzzz} 23195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 23205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\itemzzz #1{\begingroup % 23215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\hsize by -\rightskip 23225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\hsize by -\tableindent 23235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0=\hbox{\itemindicate{#1}}% 23245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \itemindex{#1}% 23255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nobreak % This prevents a break before @itemx. 23265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 23275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If the item text does not fit in the space we have, put it on a line 23285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % by itself, and do not allow a page break either before or after that 23295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % line. We do not start a paragraph here because then if the next 23305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % command is, e.g., @kindex, the whatsit would get put into the 23315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % horizontal list on a line by itself, resulting in extra blank space. 23325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifdim \wd0>\itemmax 23335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 23345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Make this a paragraph so we get the \parskip glue and wrapping, 23355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % but leave it ragged-right. 23365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \begingroup 23375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\leftskip by-\tableindent 23385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\hsize by\tableindent 23395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\rightskip by0pt plus1fil 23405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \leavevmode\unhbox0\par 23415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup 23425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 23435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We're going to be starting a paragraph, but we don't want the 23445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \parskip glue -- logically it's part of the @item we just started. 23455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nobreak \vskip-\parskip 23465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 23475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Stop a page break at the \parskip glue coming up. However, if 23485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % what follows is an environment such as @example, there will be no 23495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \parskip glue; then the negative vskip we just inserted would 23505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % cause the example and the item to crash together. So we use this 23515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % bizarre value of 10001 as a signal to \aboveenvbreak to insert 23525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \parskip glue after all. Section titles are handled this way also. 23535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 23545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \penalty 10001 23555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup 23565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \itemxneedsnegativevskipfalse 23575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 23585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % The item text fits into the space. Start a paragraph, so that the 23595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % following text (if any) will end up on the same line. 23605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noindent 23615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Do this with kerns and \unhbox so that if there is a footnote in 23625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % the item text, it can migrate to the main vertical list and 23635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % eventually be printed. 23645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nobreak\kern-\tableindent 23655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 23665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \unhbox0 23675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nobreak\kern\dimen0 23685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup 23695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \itemxneedsnegativevskiptrue 23705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 23715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 23725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 23735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\item{\errmessage{@item while not in a list environment}} 23745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\itemx{\errmessage{@itemx while not in a list environment}} 23755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 23765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @table, @ftable, @vtable. 23775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\table{% 23785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\itemindex\gobble 23795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tablecheck{table}% 23805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 23815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\ftable{% 23825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\itemindex ##1{\doind {fn}{\code{##1}}}% 23835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tablecheck{ftable}% 23845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 23855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\vtable{% 23865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\itemindex ##1{\doind {vr}{\code{##1}}}% 23875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tablecheck{vtable}% 23885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 23895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\tablecheck#1{% 23905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum \the\catcode`\^^M=\active 23915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup 23925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errmessage{This command won't work in this context; perhaps the problem is 23935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project that we are \inenvironment\thisenv}% 23945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\next{\doignore{#1}}% 23955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 23965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\next\tablex 23975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 23985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \next 23995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 24005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\tablex#1{% 24015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\itemindicate{#1}% 24025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parsearg\tabley 24035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 24045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\tabley#1{% 24055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 24065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \makevalueexpandable 24075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\temp{\noexpand\tablez #1\space\space\space}% 24085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter 24095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }\temp \endtablez 24105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 24115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\tablez #1 #2 #3 #4\endtablez{% 24125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \aboveenvbreak 24135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum 0#1>0 \advance \leftskip by #1\mil \fi 24145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum 0#2>0 \tableindent=#2\mil \fi 24155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum 0#3>0 \advance \rightskip by #3\mil \fi 24165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \itemmax=\tableindent 24175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance \itemmax by -\itemmargin 24185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance \leftskip by \tableindent 24195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \exdentamount=\tableindent 24205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parindent = 0pt 24215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parskip = \smallskipamount 24225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifdim \parskip=0pt \parskip=2pt \fi 24235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\item = \internalBitem 24245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\itemx = \internalBitemx 24255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 24265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Etable{\endgraf\afterenvbreak} 24275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\Eftable\Etable 24285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\Evtable\Etable 24295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\Eitemize\Etable 24305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\Eenumerate\Etable 24315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 24325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This is the counter used by @enumerate, which is really @itemize 24335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 24345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount \itemno 24355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 24365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\itemize{\parsearg\doitemize} 24375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 24385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doitemize#1{% 24395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \aboveenvbreak 24405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \itemmax=\itemindent 24415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\itemmax by -\itemmargin 24425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\leftskip by \itemindent 24435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \exdentamount=\itemindent 24445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parindent=0pt 24455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parskip=\smallskipamount 24465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifdim\parskip=0pt \parskip=2pt \fi 24475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\itemcontents{#1}% 24485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % @itemize with no arg is equivalent to @itemize @bullet. 24495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi 24505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\item=\itemizeitem 24515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 24525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 24535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Definition of @item while inside @itemize and @enumerate. 24545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 24555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\itemizeitem{% 24565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\itemno by 1 % for enumerations 24575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\let\par=\endgraf \smallbreak}% reasonable place to break 24585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 24595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If the document has an @itemize directly after a section title, a 24605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \nobreak will be last on the list, and \sectionheading will have 24615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % done a \vskip-\parskip. In that case, we don't want to zero 24625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % parskip, or the item text will crash with the heading. On the 24635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % other hand, when there is normal text preceding the item (as there 24645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % usually is), we do want to zero parskip, or there would be too much 24655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % space. In that case, we won't have a \nobreak before. At least 24665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % that's the theory. 24675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\lastpenalty<10000 \parskip=0in \fi 24685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noindent 24695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% 24705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vadjust{\penalty 1200}}% not good to break after first line of item. 24715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \flushcr 24725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 24735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 24745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \splitoff TOKENS\endmark defines \first to be the first token in 24755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% TOKENS, and \rest to be the remainder. 24765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 24775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% 24785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 24795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Allow an optional argument of an uppercase letter, lowercase letter, 24805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% or number, to specify the first label in the enumerated list. No 24815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% argument is the same as `1'. 24825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 24835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envparseargdef\enumerate{\enumeratey #1 \endenumeratey} 24845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\enumeratey #1 #2\endenumeratey{% 24855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If we were given no argument, pretend we were given `1'. 24865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\thearg{#1}% 24875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\thearg\empty \def\thearg{1}\fi 24885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 24895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Detect if the argument is a single token. If so, it might be a 24905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % letter. Otherwise, the only valid thing it can be is a number. 24915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % (We will always have one token, because of the test we just made. 24925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % This is a good thing, since \splitoff doesn't work given nothing at 24935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % all -- the first parameter is undelimited.) 24945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\splitoff\thearg\endmark 24955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\rest\empty 24965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Only one token in the argument. It could still be anything. 24975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % A ``lowercase letter'' is one whose \lccode is nonzero. 24985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % An ``uppercase letter'' is one whose \lccode is both nonzero, and 24995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % not equal to itself. 25005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Otherwise, we assume it's a number. 25015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 25025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We need the \relax at the end of the \ifnum lines to stop TeX from 25035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % continuing to look for a <number>. 25045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 25055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\lccode\expandafter`\thearg=0\relax 25065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \numericenumerate % a number (we hope) 25075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 25085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % It's a letter. 25095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax 25105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \lowercaseenumerate % lowercase letter 25115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 25125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \uppercaseenumerate % uppercase letter 25135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 25145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 25155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 25165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Multiple tokens in the argument. We hope it's a number. 25175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \numericenumerate 25185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 25195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 25205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 25215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% An @enumerate whose labels are integers. The starting integer is 25225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% given in \thearg. 25235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 25245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\numericenumerate{% 25255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \itemno = \thearg 25265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \startenumeration{\the\itemno}% 25275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 25285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 25295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The starting (lowercase) letter is in \thearg. 25305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\lowercaseenumerate{% 25315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \itemno = \expandafter`\thearg 25325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \startenumeration{% 25335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Be sure we're not beyond the end of the alphabet. 25345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\itemno=0 25355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errmessage{No more lowercase letters in @enumerate; get a bigger 25365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project alphabet}% 25375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 25385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \char\lccode\itemno 25395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 25405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 25415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 25425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The starting (uppercase) letter is in \thearg. 25435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\uppercaseenumerate{% 25445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \itemno = \expandafter`\thearg 25455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \startenumeration{% 25465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Be sure we're not beyond the end of the alphabet. 25475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\itemno=0 25485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errmessage{No more uppercase letters in @enumerate; get a bigger 25495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project alphabet} 25505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 25515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \char\uccode\itemno 25525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 25535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 25545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 25555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Call \doitemize, adding a period to the first argument and supplying the 25565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% common last two arguments. Also subtract one from the initial value in 25575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \itemno, since @item increments \itemno. 25585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 25595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\startenumeration#1{% 25605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\itemno by -1 25615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \doitemize{#1.}\flushcr 25625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 25635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 25645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @alphaenumerate and @capsenumerate are abbreviations for giving an arg 25655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to @enumerate. 25665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 25675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\alphaenumerate{\enumerate{a}} 25685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\capsenumerate{\enumerate{A}} 25695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Ealphaenumerate{\Eenumerate} 25705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Ecapsenumerate{\Eenumerate} 25715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 25725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 25735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @multitable macros 25745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Amy Hendrickson, 8/18/94, 3/6/96 25755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 25765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @multitable ... @end multitable will make as many columns as desired. 25775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Contents of each column will wrap at width given in preamble. Width 25785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% can be specified either with sample text given in a template line, 25795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% or in percent of \hsize, the current width of text on page. 25805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 25815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Table can continue over pages but will only break between lines. 25825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 25835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% To make preamble: 25845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 25855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Either define widths of columns in terms of percent of \hsize: 25865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @multitable @columnfractions .25 .3 .45 25875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @item ... 25885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 25895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Numbers following @columnfractions are the percent of the total 25905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% current hsize to be used for each column. You may use as many 25915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% columns as desired. 25925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 25935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 25945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Or use a template: 25955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @multitable {Column 1 template} {Column 2 template} {Column 3 template} 25965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @item ... 25975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% using the widest term desired in each column. 25985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 25995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Each new table line starts with @item, each subsequent new column 26005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% starts with @tab. Empty columns may be produced by supplying @tab's 26015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% with nothing between them for as many times as empty columns are needed, 26025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% ie, @tab@tab@tab will produce two empty columns. 26035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 26045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @item, @tab do not need to be on their own lines, but it will not hurt 26055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% if they are. 26065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 26075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Sample multitable: 26085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 26095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @multitable {Column 1 template} {Column 2 template} {Column 3 template} 26105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @item first col stuff @tab second col stuff @tab third col 26115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @item 26125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% first col stuff 26135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @tab 26145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% second col stuff 26155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @tab 26165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% third col 26175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @item first col stuff @tab second col stuff 26185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @tab Many paragraphs of text may be used in any column. 26195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 26205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% They will wrap at the width determined by the template. 26215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @item@tab@tab This will be in third column. 26225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @end multitable 26235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 26245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Default dimensions may be reset by user. 26255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @multitableparskip is vertical space between paragraphs in table. 26265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @multitableparindent is paragraph indent in table. 26275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @multitablecolmargin is horizontal space to be left between columns. 26285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @multitablelinespace is space to leave between table items, baseline 26295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to baseline. 26305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 0pt means it depends on current normal line spacing. 26315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 26325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\multitableparskip 26335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\multitableparindent 26345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\multitablecolspace 26355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\multitablelinespace 26365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\multitableparskip=0pt 26375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\multitableparindent=6pt 26385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\multitablecolspace=12pt 26395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\multitablelinespace=0pt 26405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 26415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Macros used to set up halign preamble: 26425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 26435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\endsetuptable\relax 26445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\xendsetuptable{\endsetuptable} 26455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\columnfractions\relax 26465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\xcolumnfractions{\columnfractions} 26475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifsetpercent 26485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 26495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is the @columnfraction, usually a decimal number like .5, but might 26505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% be just 1. We just use it, whatever it is. 26515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 26525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pickupwholefraction#1 {% 26535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\advance\colcount by 1 26545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% 26555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setuptable 26565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 26575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 26585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\colcount 26595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setuptable#1{% 26605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\firstarg{#1}% 26615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\firstarg\xendsetuptable 26625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\go = \relax 26635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 26645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\firstarg\xcolumnfractions 26655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\setpercenttrue 26665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 26675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifsetpercent 26685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\go\pickupwholefraction 26695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 26705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\advance\colcount by 1 26715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a 26725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % separator; typically that is always in the input, anyway. 26735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% 26745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 26755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 26765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\go\pickupwholefraction 26775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Put the argument back for the \pickupwholefraction call, so 26785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % we'll always have a period there to be parsed. 26795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\go{\pickupwholefraction#1}% 26805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 26815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\go = \setuptable 26825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi% 26835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 26845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \go 26855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 26865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 26875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% multitable-only commands. 26885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 26895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @headitem starts a heading row, which we typeset in bold. 26905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Assignments have to be global since we are inside the implicit group 26915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% of an alignment entry. Note that \everycr resets \everytab. 26925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}% 26935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 26945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% A \tab used to include \hskip1sp. But then the space in a template 26955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% line is not enough. That is bad. So let's go back to just `&' until 26965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% we encounter the problem it was intended to solve again. 26975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% --karl, nathan@acm.org, 20apr99. 26985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\tab{\checkenv\multitable &\the\everytab}% 26995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 27005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @multitable ... @end multitable definitions: 27015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 27025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\everytab % insert after every tab. 27035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 27045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\multitable{% 27055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip\parskip 27065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \startsavinginserts 27075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 27085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % @item within a multitable starts a normal row. 27095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We use \def instead of \let so that if one of the multitable entries 27105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % contains an @itemize, we don't choke on the \item (seen as \crcr aka 27115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \endtemplate) expanding \doitemize. 27125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\item{\crcr}% 27135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 27145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tolerance=9500 27155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hbadness=9500 27165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setmultitablespacing 27175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parskip=\multitableparskip 27185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parindent=\multitableparindent 27195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \overfullrule=0pt 27205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\colcount=0 27215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 27225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \everycr = {% 27235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noalign{% 27245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\everytab={}% 27255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\colcount=0 % Reset the column counter. 27265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Check for saved footnotes, etc. 27275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \checkinserts 27285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Keeps underfull box messages off when table breaks over pages. 27295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project %\filbreak 27305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Maybe so, but it also creates really weird page breaks when the 27315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % table breaks over pages. Wouldn't \vfil be better? Wait until the 27325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % problem manifests itself, so it can be fixed for real --karl. 27335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 27345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 27355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 27365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parsearg\domultitable 27375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 27385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\domultitable#1{% 27395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % To parse everything between @multitable and @item: 27405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setuptable#1 \endsetuptable 27415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 27425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % This preamble sets up a generic column definition, which will 27435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % be used as many times as user calls for columns. 27445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \vtop will set a single line and will also let text wrap and 27455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % continue for many paragraphs if desired. 27465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \halign\bgroup &% 27475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\advance\colcount by 1 27485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \multistrut 27495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vtop{% 27505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Use the current \colcount to find the correct column width: 27515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hsize=\expandafter\csname col\the\colcount\endcsname 27525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 27535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % In order to keep entries from bumping into each other 27545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % we will add a \leftskip of \multitablecolspace to all columns after 27555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % the first one. 27565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 27575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If a template has been used, we will add \multitablecolspace 27585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % to the width of each template entry. 27595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 27605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If the user has set preamble in terms of percent of \hsize we will 27615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % use that dimension as the width of the column, and the \leftskip 27625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % will keep entries from bumping into each other. Table will start at 27635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % left margin and final column will justify at right margin. 27645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 27655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Make sure we don't inherit \rightskip from the outer environment. 27665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \rightskip=0pt 27675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\colcount=1 27685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % The first column will be indented with the surrounding text. 27695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\hsize by\leftskip 27705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 27715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifsetpercent \else 27725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If user has not set preamble in terms of percent of \hsize 27735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % we will advance \hsize by \multitablecolspace. 27745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\hsize by \multitablecolspace 27755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 27765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % In either case we will make \leftskip=\multitablecolspace: 27775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \leftskip=\multitablecolspace 27785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 27795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Ignoring space at the beginning and end avoids an occasional spurious 27805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % blank line, when TeX decides to break the line at the space before the 27815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % box from the multistrut, so the strut ends up on a line by itself. 27825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % For example: 27835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % @multitable @columnfractions .11 .89 27845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % @item @code{#} 27855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % @tab Legal holiday which is valid in major parts of the whole country. 27865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Is automatically provided with highlighting sequences respectively 27875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % marking characters. 27885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noindent\ignorespaces##\unskip\multistrut 27895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }\cr 27905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 27915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Emultitable{% 27925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \crcr 27935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \egroup % end the \halign 27945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\setpercentfalse 27955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 27965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 27975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setmultitablespacing{% 27985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\multistrut{\strut}% just use the standard line spacing 27995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 28005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Compute \multitablelinespace (if not defined by user) for use in 28015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \multitableparskip calculation. We used define \multistrut based on 28025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % this, but (ironically) that caused the spacing to be off. 28035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. 28045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifdim\multitablelinespace=0pt 28055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip 28065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\advance\multitablelinespace by-\ht0 28075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi 28085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%% Test to see if parskip is larger than space between lines of 28095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%% table. If not, do nothing. 28105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%% If so, set to same dimension as multitablelinespace. 28115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifdim\multitableparskip>\multitablelinespace 28125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\multitableparskip=\multitablelinespace 28135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller 28145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project %% than skip between lines in the table. 28155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi% 28165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifdim\multitableparskip=0pt 28175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\multitableparskip=\multitablelinespace 28185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller 28195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project %% than skip between lines in the table. 28205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi} 28215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 28225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 28235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{conditionals,} 28245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 28255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, 28265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @ifnotxml always succeed. They currently do nothing; we don't 28275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% attempt to check whether the conditionals are properly nested. But we 28285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% have to remember that they are conditionals, so that @end doesn't 28295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% attempt to close an environment group. 28305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 28315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\makecond#1{% 28325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\let\csname #1\endcsname = \relax 28335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\let\csname iscond.#1\endcsname = 1 28345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 28355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makecond{iftex} 28365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makecond{ifnotdocbook} 28375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makecond{ifnothtml} 28385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makecond{ifnotinfo} 28395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makecond{ifnotplaintext} 28405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makecond{ifnotxml} 28415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 28425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Ignore @ignore, @ifhtml, @ifinfo, and the like. 28435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 28445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\direntry{\doignore{direntry}} 28455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\documentdescription{\doignore{documentdescription}} 28465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\docbook{\doignore{docbook}} 28475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\html{\doignore{html}} 28485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifdocbook{\doignore{ifdocbook}} 28495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifhtml{\doignore{ifhtml}} 28505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifinfo{\doignore{ifinfo}} 28515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifnottex{\doignore{ifnottex}} 28525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifplaintext{\doignore{ifplaintext}} 28535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifxml{\doignore{ifxml}} 28545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ignore{\doignore{ignore}} 28555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\menu{\doignore{menu}} 28565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\xml{\doignore{xml}} 28575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 28585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Ignore text until a line `@end #1', keeping track of nested conditionals. 28595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 28605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% A count to remember the depth of nesting. 28615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\doignorecount 28625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 28635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doignore#1{\begingroup 28645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Scan in ``verbatim'' mode: 28655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\@ = \other 28665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\{ = \other 28675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\} = \other 28685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 28695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Make sure that spaces turn into tokens that match what \doignoretext wants. 28705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \spaceisspace 28715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 28725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Count number of #1's that we've seen. 28735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \doignorecount = 0 28745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 28755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Swallow text until we reach the matching `@end #1'. 28765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dodoignore{#1}% 28775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 28785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 28795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. 28805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \obeylines % 28815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 28825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\dodoignore#1{% 28835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % #1 contains the command name as a string, e.g., `ifinfo'. 28845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 28855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Define a command to find the next `@end #1', which must be on a line 28865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % by itself. 28875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \long\def\doignoretext##1^^M@end #1{\doignoretextyyy##1^^M@#1\_STOP_}% 28885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % And this command to find another #1 command, at the beginning of a 28895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % line. (Otherwise, we would consider a line `@c @ifset', for 28905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % example, to count as an @ifset for nesting.) 28915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% 28925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 28935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % And now expand that command. 28945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \obeylines % 28955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \doignoretext ^^M% 28965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 28975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 28985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 28995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doignoreyyy#1{% 29005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temp{#1}% 29015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\temp\empty % Nothing found. 29025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\next\doignoretextzzz 29035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else % Found a nested condition, ... 29045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\doignorecount by 1 29055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\next\doignoretextyyy % ..., look for another. 29065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If we're here, #1 ends with ^^M\ifinfo (for example). 29075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 29085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \next #1% the token \_STOP_ is present just after this macro. 29095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 29105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 29115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We have to swallow the remaining "\_STOP_". 29125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 29135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doignoretextzzz#1{% 29145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\doignorecount = 0 % We have just found the outermost @end. 29155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\next\enddoignore 29165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else % Still inside a nested condition. 29175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\doignorecount by -1 29185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\next\doignoretext % Look for the next @end. 29195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 29205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \next 29215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 29225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 29235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Finish off ignored text. 29245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\enddoignore{\endgroup\ignorespaces} 29255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 29265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 29275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @set VAR sets the variable VAR to an empty value. 29285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. 29295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 29305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Since we want to separate VAR from REST-OF-LINE (which might be 29315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% empty), we can't just use \parsearg; we have to insert a space of our 29325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% own to delimit the rest of the line, and then take it out again if we 29335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% didn't need it. 29345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We rely on the fact that \parsearg sets \catcode`\ =10. 29355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 29365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\set{\setyyy#1 \endsetyyy} 29375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setyyy#1 #2\endsetyyy{% 29385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 29395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \makevalueexpandable 29405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temp{#2}% 29415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\next{\gdef\makecsname{SET#1}}% 29425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\temp\empty 29435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \next{}% 29445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 29455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setzzz#2\endsetzzz 29465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 29475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 29485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 29495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Remove the trailing space \setxxx inserted. 29505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setzzz#1 \endsetzzz{\next{#1}} 29515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 29525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @clear VAR clears (i.e., unsets) the variable VAR. 29535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 29545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\clear{% 29555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 29565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \makevalueexpandable 29575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\expandafter\let\csname SET#1\endcsname=\relax 29585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 29595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 29605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 29615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @value{foo} gets the text saved in variable foo. 29625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\value{\begingroup\makevalueexpandable\valuexxx} 29635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\valuexxx#1{\expandablevalue{#1}\endgroup} 29645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{ 29655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\- = \active \catcode`\_ = \active 29665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 29675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\makevalueexpandable{% 29685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\value = \expandablevalue 29695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We don't want these characters active, ... 29705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\-=\other \catcode`\_=\other 29715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % ..., but we might end up with active ones in the argument if 29725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % we're called from @code, as @code{@value{foo-bar_}}, though. 29735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % So \let them to their normal equivalents. 29745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let-\realdash \let_\normalunderscore 29755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } 29765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 29775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 29785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We have this subroutine so that we can handle at least some @value's 29795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% properly in indexes (we call \makevalueexpandable in \indexdummies). 29805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The command has to be fully expandable (if the variable is set), since 29815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the result winds up in the index file. This means that if the 29825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% variable's value contains other Texinfo commands, it's almost certain 29835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% it will fail (although perhaps we could fix that with sufficient work 29845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to do a one-level expansion on the result, instead of complete). 29855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 29865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\expandablevalue#1{% 29875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\ifx\csname SET#1\endcsname\relax 29885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {[No value for ``#1'']}% 29895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \message{Variable `#1', used in @value, is not set.}% 29905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 29915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \csname SET#1\endcsname 29925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 29935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 29945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 29955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined 29965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% with @set. 29975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 29985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% To get special treatment of `@end ifset,' call \makeond and the redefine. 29995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 30005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makecond{ifset} 30015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} 30025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doifset#1#2{% 30035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 30045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \makevalueexpandable 30055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\next=\empty 30065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\ifx\csname SET#2\endcsname\relax 30075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project #1% If not set, redefine \next. 30085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 30095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter 30105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }\next 30115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 30125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifsetfail{\doignore{ifset}} 30135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 30145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been 30155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% defined with @set, or has been undefined with @clear. 30165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 30175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The `\else' inside the `\doifset' parameter is a trick to reuse the 30185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% above code: if the variable is not set, do nothing, if it is set, 30195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% then redefine \next to \ifclearfail. 30205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 30215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makecond{ifclear} 30225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} 30235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifclearfail{\doignore{ifclear}} 30245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 30255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @dircategory CATEGORY -- specify a category of the dir file 30265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% which this file should belong to. Ignore this in TeX. 30275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\dircategory=\comment 30285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 30295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @defininfoenclose. 30305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\definfoenclose=\comment 30315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 30325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 30335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{indexing,} 30345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Index generation facilities 30355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 30365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define \newwrite to be identical to plain tex's \newwrite 30375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% except not \outer, so it can be used within macros and \if's. 30385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\edef\newwrite{\makecsname{ptexnewwrite}} 30395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 30405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \newindex {foo} defines an index named foo. 30415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It automatically defines \fooindex such that 30425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \fooindex ...rest of line... puts an entry in the index foo. 30435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It also defines \fooindfile to be the number of the output channel for 30445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the file that accumulates this index. The file's extension is foo. 30455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The name of an index should be no more than 2 characters long 30465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% for the sake of vms. 30475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 30485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\newindex#1{% 30495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \iflinks 30505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\newwrite \csname#1indfile\endcsname 30515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \openout \csname#1indfile\endcsname \jobname.#1 % Open the file 30525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 30535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\xdef\csname#1index\endcsname{% % Define @#1index 30545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noexpand\doindex{#1}} 30555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 30565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 30575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @defindex foo == \newindex{foo} 30585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 30595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\defindex{\parsearg\newindex} 30605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 30615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define @defcodeindex, like @defindex except put all entries in @code. 30625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 30635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\defcodeindex{\parsearg\newcodeindex} 30645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 30655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\newcodeindex#1{% 30665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \iflinks 30675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\newwrite \csname#1indfile\endcsname 30685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \openout \csname#1indfile\endcsname \jobname.#1 30695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 30705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\xdef\csname#1index\endcsname{% 30715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noexpand\docodeindex{#1}}% 30725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 30735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 30745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 30755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @synindex foo bar makes index foo feed into index bar. 30765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Do this instead of @defindex foo if you don't want it as a separate index. 30775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 30785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @syncodeindex foo bar similar, but put all entries made for index foo 30795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% inside @code. 30805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 30815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} 30825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} 30835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 30845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), 30855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #3 the target index (bar). 30865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dosynindex#1#2#3{% 30875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Only do \closeout if we haven't already done it, else we'll end up 30885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % closing the target index. 30895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter \ifx\csname donesynindex#2\endcsname \undefined 30905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % The \closeout helps reduce unnecessary open files; the limit on the 30915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Acorn RISC OS is a mere 16 files. 30925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\closeout\csname#2indfile\endcsname 30935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\let\csname\donesynindex#2\endcsname = 1 30945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 30955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % redefine \fooindfile: 30965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname 30975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\let\csname#2indfile\endcsname=\temp 30985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % redefine \fooindex: 30995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% 31005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 31015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 31025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define \doindex, the driver for all \fooindex macros. 31035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Argument #1 is generated by the calling \fooindex macro, 31045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and it is "foo", the name of the index. 31055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 31065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \doindex just uses \parsearg; it calls \doind for the actual work. 31075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This is because \doind is more useful to call from other macros. 31085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 31095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% There is also \dosubind {index}{topic}{subtopic} 31105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% which makes an entry in a two-level index such as the operation index. 31115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 31125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} 31135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\singleindexer #1{\doind{\indexname}{#1}} 31145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 31155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% like the previous two, but they put @code around the argument. 31165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} 31175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} 31185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 31195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Take care of Texinfo commands that can appear in an index entry. 31205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Since there are some commands we want to expand, and others we don't, 31215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% we have to laboriously prevent expansion for those that we don't. 31225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 31235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\indexdummies{% 31245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\@{@}% change to @@ when we switch to @ as escape char in index files. 31255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\ {\realbackslash\space }% 31265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Need these in case \tex is in effect and \{ is a \delimiter again. 31275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % But can't use \lbracecmd and \rbracecmd because texindex assumes 31285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % braces and backslashes are used only as delimiters. 31295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\{ = \mylbrace 31305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\} = \myrbrace 31315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 31325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \definedummyword defines \#1 as \realbackslash #1\space, thus 31335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % effectively preventing its expansion. This is used only for control 31345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % words, not control letters, because the \space would be incorrect 31355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % for control characters, but is needed to separate the control word 31365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % from whatever follows. 31375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 31385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % For control letters, we have \definedummyletter, which omits the 31395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % space. 31405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 31415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % These can be used both for control words that take an argument and 31425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % those that do not. If it is followed by {arg} in the input, then 31435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % that will dutifully get written to the index (or wherever). 31445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 31455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\definedummyword##1{% 31465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}% 31475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 31485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\definedummyletter##1{% 31495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\def\csname ##1\endcsname{\realbackslash ##1}% 31505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 31515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\definedummyaccent\definedummyletter 31525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 31535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Do the redefinitions. 31545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \commondummies 31555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 31565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 31575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For the aux file, @ is the escape character. So we want to redefine 31585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% everything using @ instead of \realbackslash. When everything uses 31595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @, this will be simpler. 31605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 31615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\atdummies{% 31625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\@{@@}% 31635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\ {@ }% 31645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\{ = \lbraceatcmd 31655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\} = \rbraceatcmd 31665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 31675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % (See comments in \indexdummies.) 31685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\definedummyword##1{% 31695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\def\csname ##1\endcsname{@##1\space}% 31705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 31715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\definedummyletter##1{% 31725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\def\csname ##1\endcsname{@##1}% 31735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 31745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\definedummyaccent\definedummyletter 31755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 31765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Do the redefinitions. 31775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \commondummies 31785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 31795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 31805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Called from \indexdummies and \atdummies. \definedummyword and 31815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \definedummyletter must be defined first. 31825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 31835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\commondummies{% 31845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 31855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \normalturnoffactive 31865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 31875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \commondummiesnofonts 31885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 31895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyletter{_}% 31905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 31915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Non-English letters. 31925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{AA}% 31935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{AE}% 31945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{L}% 31955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{OE}% 31965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{O}% 31975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{aa}% 31985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{ae}% 31995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{l}% 32005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{oe}% 32015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{o}% 32025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{ss}% 32035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{exclamdown}% 32045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{questiondown}% 32055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{ordf}% 32065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{ordm}% 32075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 32085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Although these internal commands shouldn't show up, sometimes they do. 32095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{bf}% 32105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{gtr}% 32115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{hat}% 32125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{less}% 32135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{sf}% 32145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{sl}% 32155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{tclose}% 32165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{tt}% 32175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 32185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{LaTeX}% 32195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{TeX}% 32205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 32215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Assorted special characters. 32225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{bullet}% 32235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{comma}% 32245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{copyright}% 32255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{registeredsymbol}% 32265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{dots}% 32275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{enddots}% 32285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{equiv}% 32295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{error}% 32305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{euro}% 32315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{expansion}% 32325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{minus}% 32335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{pounds}% 32345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{point}% 32355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{print}% 32365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{result}% 32375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 32385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Handle some cases of @value -- where it does not contain any 32395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % (non-fully-expandable) commands. 32405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \makevalueexpandable 32415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 32425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Normal spaces, not active ones. 32435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \unsepspaces 32445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 32455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % No macro expansion. 32465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \turnoffmacros 32475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 32485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 32495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \commondummiesnofonts: common to \commondummies and \indexnofonts. 32505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 32515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Better have this without active chars. 32525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{ 32535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\~=\other 32545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\commondummiesnofonts{% 32555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Control letters and accents. 32565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyletter{!}% 32575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyaccent{"}% 32585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyaccent{'}% 32595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyletter{*}% 32605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyaccent{,}% 32615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyletter{.}% 32625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyletter{/}% 32635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyletter{:}% 32645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyaccent{=}% 32655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyletter{?}% 32665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyaccent{^}% 32675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyaccent{`}% 32685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyaccent{~}% 32695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{u}% 32705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{v}% 32715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{H}% 32725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{dotaccent}% 32735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{ringaccent}% 32745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{tieaccent}% 32755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{ubaraccent}% 32765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{udotaccent}% 32775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{dotless}% 32785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 32795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Texinfo font commands. 32805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{b}% 32815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{i}% 32825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{r}% 32835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{sc}% 32845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{t}% 32855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 32865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Commands that take arguments. 32875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{acronym}% 32885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{cite}% 32895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{code}% 32905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{command}% 32915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{dfn}% 32925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{emph}% 32935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{env}% 32945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{file}% 32955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{kbd}% 32965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{key}% 32975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{math}% 32985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{option}% 32995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{samp}% 33005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{strong}% 33015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{tie}% 33025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{uref}% 33035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{url}% 33045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{var}% 33055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{verb}% 33065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \definedummyword{w}% 33075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } 33085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 33095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 33105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \indexnofonts is used when outputting the strings to sort the index 33115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% by, and when constructing control sequence names. It eliminates all 33125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% control sequences and just writes whatever the best ASCII sort string 33135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% would be for a given command (usually its argument). 33145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 33155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\indexnofonts{% 33165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Accent commands should become @asis. 33175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\definedummyaccent##1{% 33185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\let\csname ##1\endcsname\asis 33195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 33205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We can just ignore other control letters. 33215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\definedummyletter##1{% 33225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\def\csname ##1\endcsname{}% 33235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 33245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Hopefully, all control words can become @asis. 33255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\definedummyword\definedummyaccent 33265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 33275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \commondummiesnofonts 33285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 33295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Don't no-op \tt, since it isn't a user-level command 33305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % and is used in the definitions of the active chars like <, >, |, etc. 33315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Likewise with the other plain tex font commands. 33325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project %\let\tt=\asis 33335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 33345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\ { }% 33355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\@{@}% 33365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % how to handle braces? 33375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\_{\normalunderscore}% 33385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 33395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Non-English letters. 33405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\AA{AA}% 33415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\AE{AE}% 33425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\L{L}% 33435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\OE{OE}% 33445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\O{O}% 33455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\aa{aa}% 33465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\ae{ae}% 33475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\l{l}% 33485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\oe{oe}% 33495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\o{o}% 33505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\ss{ss}% 33515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\exclamdown{!}% 33525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\questiondown{?}% 33535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\ordf{a}% 33545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\ordm{o}% 33555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 33565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\LaTeX{LaTeX}% 33575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\TeX{TeX}% 33585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 33595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Assorted special characters. 33605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % (The following {} will end up in the sort string, but that's ok.) 33615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\bullet{bullet}% 33625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\comma{,}% 33635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\copyright{copyright}% 33645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\registeredsymbol{R}% 33655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\dots{...}% 33665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\enddots{...}% 33675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\equiv{==}% 33685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\error{error}% 33695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\euro{euro}% 33705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\expansion{==>}% 33715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\minus{-}% 33725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\pounds{pounds}% 33735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\point{.}% 33745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\print{-|}% 33755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\result{=>}% 33765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 33775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Don't write macro names. 33785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \emptyusermacros 33795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 33805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 33815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\indexbackslash=0 %overridden during \printindex. 33825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\SETmarginindex=\relax % put index entries in margin (undocumented)? 33835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 33845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Most index entries go through here, but \dosubind is the general case. 33855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is the index name, #2 is the entry text. 33865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doind#1#2{\dosubind{#1}{#2}{}} 33875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 33885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Workhorse for all \fooindexes. 33895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is name of index, #2 is stuff to put there, #3 is subentry -- 33905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% empty if called from \doind, as we usually are (the main exception 33915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% is with most defuns, which call us directly). 33925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 33935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dosubind#1#2#3{% 33945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \iflinks 33955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 33965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Store the main index entry text (including the third arg). 33975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \toks0 = {#2}% 33985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If third arg is present, precede it with a space. 33995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\thirdarg{#3}% 34005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\thirdarg\empty \else 34015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \toks0 = \expandafter{\the\toks0 \space #3}% 34025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 34035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 34045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\writeto{\csname#1indfile\endcsname}% 34055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 34065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifvmode 34075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dosubindsanitize 34085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 34095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dosubindwrite 34105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 34115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 34125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 34135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 34145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 34155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Write the entry in \toks0 to the index file: 34165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 34175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dosubindwrite{% 34185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Put the index entry in the margin if desired. 34195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\SETmarginindex\relax\else 34205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% 34215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 34225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 34235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Remember, we are within a group. 34245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \indexdummies % Must do this here, since \bf, etc expand at this stage 34255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \escapechar=`\\ 34265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now 34275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % so it will be output as is; and it will print as backslash. 34285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 34295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Process the index entry with all font commands turned off, to 34305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % get the string to sort by. 34315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\indexnofonts 34325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\temp{\the\toks0}% need full expansion 34335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \xdef\indexsorttmp{\temp}% 34345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 34355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 34365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Set up the complete index entry, with both the sort key and 34375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % the original text, including any font commands. We write 34385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % three arguments to \entry to the .?? file (four in the 34395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % subentry case), texindex reduces to two when writing the .??s 34405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % sorted result. 34415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\temp{% 34425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \write\writeto{% 34435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% 34445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 34455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \temp 34465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 34475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 34485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Take care of unwanted page breaks: 34495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 34505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If a skip is the last thing on the list now, preserve it 34515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% by backing up by \lastskip, doing the \write, then inserting 34525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the skip again. Otherwise, the whatsit generated by the 34535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \write will make \lastskip zero. The result is that sequences 34545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% like this: 34555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @end defun 34565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @tindex whatever 34575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @defun ... 34585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% will have extra space inserted, because the \medbreak in the 34595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% start of the @defun won't see the skip inserted by the @end of 34605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the previous defun. 34615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 34625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% But don't do any of this if we're not in vertical mode. We 34635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% don't want to do a \vskip and prematurely end a paragraph. 34645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 34655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Avoid page breaks due to these extra skips, too. 34665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 34675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% But wait, there is a catch there: 34685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We'll have to check whether \lastskip is zero skip. \ifdim is not 34695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% sufficient for this purpose, as it ignores stretch and shrink parts 34705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% of the skip. The only way seems to be to check the textual 34715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% representation of the skip. 34725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 34735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The following is almost like \def\zeroskipmacro{0.0pt} except that 34745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the ``p'' and ``t'' characters have catcode \other, not 11 (letter). 34755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 34765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} 34775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 34785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% ..., ready, GO: 34795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 34805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dosubindsanitize{% 34815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \lastskip and \lastpenalty cannot both be nonzero simultaneously. 34825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \skip0 = \lastskip 34835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\lastskipmacro{\the\lastskip}% 34845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \count255 = \lastpenalty 34855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 34865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If \lastskip is nonzero, that means the last item was a 34875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % skip. And since a skip is discardable, that means this 34885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % -\skip0 glue we're inserting is preceded by a 34895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % non-discardable item, therefore it is not a potential 34905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % breakpoint, therefore no \nobreak needed. 34915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\lastskipmacro\zeroskipmacro 34925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 34935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip-\skip0 34945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 34955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 34965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dosubindwrite 34975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 34985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\lastskipmacro\zeroskipmacro 34995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If \lastskip was zero, perhaps the last item was a penalty, and 35005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % perhaps it was >=10000, e.g., a \nobreak. In that case, we want 35015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % to re-insert the same penalty (values >10000 are used for various 35025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % signals); since we just inserted a non-discardable item, any 35035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % following glue (such as a \parskip) would be a breakpoint. For example: 35045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 35055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % @deffn deffn-whatever 35065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % @vindex index-whatever 35075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Description. 35085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % would allow a break between the index-whatever whatsit 35095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % and the "Description." paragraph. 35105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\count255>9999 \penalty\count255 \fi 35115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 35125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % On the other hand, if we had a nonzero \lastskip, 35135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % this make-up glue would be preceded by a non-discardable item 35145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % (the whatsit from the \write), so we must insert a \nobreak. 35155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nobreak\vskip\skip0 35165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 35175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 35185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 35195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The index entry written in the file actually looks like 35205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \entry {sortstring}{page}{topic} 35215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% or 35225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \entry {sortstring}{page}{topic}{subtopic} 35235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The texindex program reads in these files and writes files 35245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% containing these kinds of lines: 35255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \initial {c} 35265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% before the first topic whose initial is c 35275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \entry {topic}{pagelist} 35285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% for a topic that is used without subtopics 35295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \primary {topic} 35305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% for the beginning of a topic that is used with subtopics 35315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \secondary {subtopic}{pagelist} 35325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% for each subtopic. 35335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 35345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define the user-accessible indexing commands 35355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @findex, @vindex, @kindex, @cindex. 35365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 35375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\findex {\fnindex} 35385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\kindex {\kyindex} 35395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\cindex {\cpindex} 35405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\vindex {\vrindex} 35415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\tindex {\tpindex} 35425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pindex {\pgindex} 35435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 35445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\cindexsub {\begingroup\obeylines\cindexsub} 35455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\obeylines % 35465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\cindexsub "#1" #2^^M{\endgroup % 35475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\dosubind{cp}{#2}{#1}}} 35485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 35495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define the macros used in formatting output of the sorted index material. 35505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 35515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @printindex causes a particular index (the ??s file) to get printed. 35525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It does not print any chapter heading (usually an @unnumbered). 35535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 35545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\printindex{\begingroup 35555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dobreak \chapheadingskip{10000}% 35565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 35575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \smallfonts \rm 35585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tolerance = 9500 35595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \everypar = {}% don't want the \kern\-parindent from indentation suppression. 35605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 35615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % See if the index file exists and is nonempty. 35625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Change catcode of @ here so that if the index file contains 35635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \initial {@} 35645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % as its first line, TeX doesn't complain about mismatched braces 35655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % (because it thinks @} is a control sequence). 35665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\@ = 11 35675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \openin 1 \jobname.#1s 35685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifeof 1 35695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \enddoublecolumns gets confused if there is no text in the index, 35705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % and it loses the chapter title and the aux file entries for the 35715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % index. The easiest way to prevent this problem is to make sure 35725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % there is some text. 35735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \putwordIndexNonexistent 35745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 35755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 35765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If the index file exists but is empty, then \openin leaves \ifeof 35775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % false. We have to make TeX try to read something from the file, so 35785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % it can discover if there is anything in it. 35795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \read 1 to \temp 35805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifeof 1 35815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \putwordIndexIsEmpty 35825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 35835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Index files are almost Texinfo source, but we use \ as the escape 35845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % character. It would be better to use @, but that's too big a change 35855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % to make right now. 35865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\indexbackslash{\backslashcurfont}% 35875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\\ = 0 35885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \escapechar = `\\ 35895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \begindoublecolumns 35905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \input \jobname.#1s 35915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \enddoublecolumns 35925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 35935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 35945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \closein 1 35955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup} 35965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 35975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% These macros are used by the sorted index file itself. 35985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Change them to control the appearance of the index. 35995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 36005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\initial#1{{% 36015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Some minor font changes for the special characters. 36025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt 36035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 36045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Remove any glue we may have, we'll be inserting our own. 36055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \removelastskip 36065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 36075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We like breaks before the index initials, so insert a bonus. 36085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nobreak 36095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip 0pt plus 3\baselineskip 36105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \penalty 0 36115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip 0pt plus -3\baselineskip 36125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 36135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Typeset the initial. Making this add up to a whole number of 36145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % baselineskips increases the chance of the dots lining up from column 36155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % to column. It still won't often be perfect, because of the stretch 36165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % we need before each entry, but it's better. 36175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 36185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % No shrink because it confuses \balancecolumns. 36195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip 1.67\baselineskip plus .5\baselineskip 36205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \leftline{\secbf #1}% 36215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Do our best not to break after the initial. 36225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nobreak 36235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip .33\baselineskip plus .1\baselineskip 36245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}} 36255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 36265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \entry typesets a paragraph consisting of the text (#1), dot leaders, and 36275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% then page number (#2) flushed to the right margin. It is used for index 36285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and table of contents entries. The paragraph is indented by \leftskip. 36295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 36305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% A straightforward implementation would start like this: 36315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \def\entry#1#2{... 36325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% But this frozes the catcodes in the argument, and can cause problems to 36335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @code, which sets - active. This problem was fixed by a kludge--- 36345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% ``-'' was active throughout whole index, but this isn't really right. 36355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 36365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The right solution is to prevent \entry from swallowing the whole text. 36375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% --kasal, 21nov03 36385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\entry{% 36395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \begingroup 36405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 36415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Start a new paragraph if necessary, so our assignments below can't 36425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % affect previous text. 36435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \par 36445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 36455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Do not fill out the last line with white space. 36465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parfillskip = 0in 36475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 36485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % No extra space above this paragraph. 36495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parskip = 0in 36505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 36515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Do not prefer a separate line ending with a hyphen to fewer lines. 36525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \finalhyphendemerits = 0 36535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 36545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \hangindent is only relevant when the entry text and page number 36555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % don't both fit on one line. In that case, bob suggests starting the 36565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % dots pretty far over on the line. Unfortunately, a large 36575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % indentation looks wrong when the entry text itself is broken across 36585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % lines. So we use a small indentation and put up with long leaders. 36595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 36605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \hangafter is reset to 1 (which is the value we want) at the start 36615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % of each paragraph, so we need not do anything with that. 36625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hangindent = 2em 36635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 36645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % When the entry text needs to be broken, just fill out the first line 36655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % with blank space. 36665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \rightskip = 0pt plus1fil 36675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 36685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % A bit of stretch before each entry for the benefit of balancing 36695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % columns. 36705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip 0pt plus1pt 36715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 36725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Swallow the left brace of the text (first parameter): 36735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \afterassignment\doentry 36745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\temp = 36755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 36765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doentry{% 36775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \bgroup % Instead of the swallowed brace. 36785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noindent 36795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \aftergroup\finishentry 36805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % And now comes the text of the entry. 36815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 36825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\finishentry#1{% 36835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % #1 is the page number. 36845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 36855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % The following is kludged to not output a line of dots in the index if 36865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % there are no page numbers. The next person who breaks this will be 36875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % cursed by a Unix daemon. 36885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\tempa{{\rm }}% 36895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\tempb{#1}% 36905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\tempc{\tempa}% 36915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\tempd{\tempb}% 36925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\tempc\tempd 36935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ % 36945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 36955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 36965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If we must, put the page number on a line of its own, and fill out 36975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % this line with blank space. (The \hfil is overwhelmed with the 36985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % fill leaders glue in \indexdotfill if the page number does fit.) 36995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hfil\penalty50 37005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \null\nobreak\indexdotfill % Have leaders before the page number. 37015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 37025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % The `\ ' here is removed by the implicit \unskip that TeX does as 37035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % part of (the primitive) \par. Without it, a spurious underfull 37045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \hbox ensues. 37055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifpdf 37065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pdfgettoks#1.% 37075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ \the\toksA 37085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 37095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ #1% 37105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 37115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 37125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \par 37135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup 37145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 37155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 37165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Like \dotfill except takes at least 1 em. 37175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\indexdotfill{\cleaders 37185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} 37195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 37205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\primary #1{\line{#1\hfil}} 37215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 37225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\secondaryindent \secondaryindent=0.5cm 37235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\secondary#1#2{{% 37245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parfillskip=0in 37255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parskip=0in 37265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hangindent=1in 37275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hangafter=1 37285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill 37295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifpdf 37305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. 37315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 37325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project #2 37335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 37345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \par 37355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}} 37365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 37375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define two-column mode, which we use to typeset indexes. 37385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Adapted from the TeXbook, page 416, which is to say, 37395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the manmac.tex format used to print the TeXbook itself. 37405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\@=11 37415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 37425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newbox\partialpage 37435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\doublecolumnhsize 37445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 37455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns 37465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Grab any single-column material above us. 37475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \output = {% 37485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 37495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Here is a possibility not foreseen in manmac: if we accumulate a 37505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % whole lot of material, we might end up calling this \output 37515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % routine twice in a row (see the doublecol-lose test, which is 37525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % essentially a couple of indexes with @setchapternewpage off). In 37535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % that case we just ship out what is in \partialpage with the normal 37545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % output routine. Generally, \partialpage will be empty when this 37555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % runs and this will be a no-op. See the indexspread.tex test case. 37565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifvoid\partialpage \else 37575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \onepageout{\pagecontents\partialpage}% 37585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 37595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 37605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\setbox\partialpage = \vbox{% 37615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Unvbox the main output page. 37625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \unvbox\PAGE 37635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \kern-\topskip \kern\baselineskip 37645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 37655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 37665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \eject % run that output routine to set \partialpage 37675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 37685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Use the double-column output routine for subsequent pages. 37695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \output = {\doublecolumnout}% 37705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 37715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Change the page size parameters. We could do this once outside this 37725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 37735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % format, but then we repeat the same computation. Repeating a couple 37745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % of assignments once per index is clearly meaningless for the 37755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % execution time, so we may as well do it in one place. 37765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 37775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % First we halve the line length, less a little for the gutter between 37785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % the columns. We compute the gutter based on the line length, so it 37795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % changes automatically with the paper format. The magic constant 37805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % below is chosen so that the gutter has the same value (well, +-<1pt) 37815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % as it did when we hard-coded it. 37825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 37835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We put the result in a separate register, \doublecolumhsize, so we 37845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % can restore it in \pagesofar, after \hsize itself has (potentially) 37855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % been clobbered. 37865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 37875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \doublecolumnhsize = \hsize 37885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\doublecolumnhsize by -.04154\hsize 37895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \divide\doublecolumnhsize by 2 37905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hsize = \doublecolumnhsize 37915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 37925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Double the \vsize as well. (We don't need a separate register here, 37935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % since nobody clobbers \vsize.) 37945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vsize = 2\vsize 37955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 37965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 37975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The double-column output routine for all double-column pages except 37985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the last. 37995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 38005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doublecolumnout{% 38015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \splittopskip=\topskip \splitmaxdepth=\maxdepth 38025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Get the available space for the double columns -- the normal 38035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % (undoubled) page height minus any material left over from the 38045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % previous page. 38055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dimen@ = \vsize 38065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \divide\dimen@ by 2 38075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\dimen@ by -\ht\partialpage 38085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 38095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % box0 will be the left-hand column, box2 the right. 38105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ 38115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \onepageout\pagesofar 38125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \unvbox255 38135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \penalty\outputpenalty 38145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 38155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 38165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Re-output the contents of the output page -- any previous material, 38175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% followed by the two boxes we just split, in box0 and box2. 38185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pagesofar{% 38195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \unvbox\partialpage 38205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 38215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hsize = \doublecolumnhsize 38225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \wd0=\hsize \wd2=\hsize 38235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hbox to\pagewidth{\box0\hfil\box2}% 38245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 38255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 38265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% All done with double columns. 38275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\enddoublecolumns{% 38285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \output = {% 38295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Split the last of the double-column material. Leave it on the 38305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % current page, no automatic page break. 38315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \balancecolumns 38325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 38335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If we end up splitting too much material for the current page, 38345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % though, there will be another page break right after this \output 38355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % invocation ends. Having called \balancecolumns once, we do not 38365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % want to call it again. Therefore, reset \output to its normal 38375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % definition right away. (We hope \balancecolumns will never be 38385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % called on to balance too much material, but if it is, this makes 38395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % the output somewhat more palatable.) 38405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\output = {\onepageout{\pagecontents\PAGE}}% 38415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 38425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \eject 38435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup % started in \begindoublecolumns 38445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 38455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \pagegoal was set to the doubled \vsize above, since we restarted 38465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % the current page. We're now back to normal single-column 38475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % typesetting, so reset \pagegoal to the normal \vsize (after the 38485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \endgroup where \vsize got restored). 38495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pagegoal = \vsize 38505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 38515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 38525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Called at the end of the double column material. 38535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\balancecolumns{% 38545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. 38555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dimen@ = \ht0 38565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\dimen@ by \topskip 38575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\dimen@ by-\baselineskip 38585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \divide\dimen@ by 2 % target to split to 38595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% 38605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \splittopskip = \topskip 38615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Loop until we get a decent breakpoint. 38625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 38635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vbadness = 10000 38645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \loop 38655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\setbox3 = \copy0 38665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\setbox1 = \vsplit3 to \dimen@ 38675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifdim\ht3>\dimen@ 38685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\advance\dimen@ by 1pt 38695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \repeat 38705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 38715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% 38725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0=\vbox to\dimen@{\unvbox1}% 38735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox2=\vbox to\dimen@{\unvbox3}% 38745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 38755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pagesofar 38765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 38775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\@ = \other 38785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 38795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 38805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{sectioning,} 38815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Chapters, sections, etc. 38825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 38835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \unnumberedno is an oxymoron, of course. But we count the unnumbered 38845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% sections so that we can refer to them unambiguously in the pdf 38855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% outlines by their "section number". We avoid collisions with chapter 38865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% numbers by starting them at 10000. (If a document ever has 10000 38875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% chapters, we're in trouble anyway, I'm sure.) 38885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\unnumberedno \unnumberedno = 10000 38895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\chapno 38905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\secno \secno=0 38915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\subsecno \subsecno=0 38925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\subsubsecno \subsubsecno=0 38935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 38945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This counter is funny since it counts through charcodes of letters A, B, ... 38955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\appendixno \appendixno = `\@ 38965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 38975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \def\appendixletter{\char\the\appendixno} 38985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We do the following ugly conditional instead of the above simple 38995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% construct for the sake of pdftex, which needs the actual 39005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% letter in the expansion, not just typeset. 39015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 39025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\appendixletter{% 39035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\appendixno=`A A% 39045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`B B% 39055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`C C% 39065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`D D% 39075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`E E% 39085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`F F% 39095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`G G% 39105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`H H% 39115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`I I% 39125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`J J% 39135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`K K% 39145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`L L% 39155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`M M% 39165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`N N% 39175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`O O% 39185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`P P% 39195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`Q Q% 39205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`R R% 39215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`S S% 39225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`T T% 39235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`U U% 39245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`V V% 39255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`W W% 39265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`X X% 39275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`Y Y% 39285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifnum\appendixno=`Z Z% 39295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % The \the is necessary, despite appearances, because \appendixletter is 39305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % expanded while writing the .toc file. \char\appendixno is not 39315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % expandable, thus it is written literally, thus all appendixes come out 39325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % with the same letter (or @) in the toc without it. 39335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\char\the\appendixno 39345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi 39355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} 39365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 39375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Each @chapter defines this as the name of the chapter. 39385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% page headings and footings can use it. @section does likewise. 39395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% However, they are not reliable, because we don't use marks. 39405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\thischapter{} 39415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\thissection{} 39425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 39435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\absseclevel % used to calculate proper heading level 39445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count 39455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 39465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @raisesections: treat @section as chapter, @subsection as section, etc. 39475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\raisesections{\global\advance\secbase by -1} 39485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\up=\raisesections % original BFox name 39495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 39505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @lowersections: treat @chapter as section, @section as subsection, etc. 39515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\lowersections{\global\advance\secbase by 1} 39525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\down=\lowersections % original BFox name 39535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 39545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% we only have subsub. 39555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\maxseclevel = 3 39565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 39575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% A numbered section within an unnumbered changes to unnumbered too. 39585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% To achive this, remember the "biggest" unnum. sec. we are currently in: 39595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\unmlevel = \maxseclevel 39605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 39615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Trace whether the current chapter is an appendix or not: 39625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \chapheadtype is "N" or "A", unnumbered chapters are ignored. 39635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapheadtype{N} 39645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 39655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Choose a heading macro 39665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is heading type 39675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #2 is heading level 39685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #3 is text for heading 39695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\genhead#1#2#3{% 39705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Compute the abs. sec. level: 39715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \absseclevel=#2 39725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\absseclevel by \secbase 39735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Make sure \absseclevel doesn't fall outside the range: 39745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum \absseclevel < 0 39755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \absseclevel = 0 39765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 39775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum \absseclevel > 3 39785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \absseclevel = 3 39795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 39805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 39815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % The heading type: 39825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\headtype{#1}% 39835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \if \headtype U% 39845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum \absseclevel < \unmlevel 39855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \chardef\unmlevel = \absseclevel 39865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 39875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 39885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Check for appendix sections: 39895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum \absseclevel = 0 39905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\chapheadtype{\headtype}% 39915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 39925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \if \headtype A\if \chapheadtype N% 39935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errmessage{@appendix... within a non-appendix chapter}% 39945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi\fi 39955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 39965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Check for numbered within unnumbered: 39975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum \absseclevel > \unmlevel 39985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\headtype{U}% 39995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 40005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \chardef\unmlevel = 3 40015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 40025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 40035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Now print the heading: 40045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \if \headtype U% 40055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifcase\absseclevel 40065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \unnumberedzzz{#3}% 40075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \or \unnumberedseczzz{#3}% 40085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \or \unnumberedsubseczzz{#3}% 40095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \or \unnumberedsubsubseczzz{#3}% 40105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 40115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 40125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \if \headtype A% 40135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifcase\absseclevel 40145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \appendixzzz{#3}% 40155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \or \appendixsectionzzz{#3}% 40165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \or \appendixsubseczzz{#3}% 40175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \or \appendixsubsubseczzz{#3}% 40185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 40195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 40205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifcase\absseclevel 40215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \chapterzzz{#3}% 40225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \or \seczzz{#3}% 40235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \or \numberedsubseczzz{#3}% 40245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \or \numberedsubsubseczzz{#3}% 40255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 40265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 40275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 40285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \suppressfirstparagraphindent 40295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 40305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 40315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% an interface: 40325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\numhead{\genhead N} 40335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\apphead{\genhead A} 40345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnmhead{\genhead U} 40355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 40365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @chapter, @appendix, @unnumbered. Increment top-level counter, reset 40375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% all lower-level sectioning counters to zero. 40385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 40395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Also set \chaplevelprefix, which we prepend to @float sequence numbers 40405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (e.g., figures), q.v. By default (before any chapter), that is empty. 40415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\chaplevelprefix = \empty 40425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 40435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz 40445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapterzzz#1{% 40455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % section resetting is \global in case the chapter is in a group, such 40465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % as an @include file. 40475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 40485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\advance\chapno by 1 40495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 40505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Used for \float. 40515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\chaplevelprefix{\the\chapno.}% 40525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \resetallfloatnos 40535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 40545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \message{\putwordChapter\space \the\chapno}% 40555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 40565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Write the actual heading. 40575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \chapmacro{#1}{Ynumbered}{\the\chapno}% 40585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 40595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % So @section and the like are numbered underneath this chapter. 40605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let\section = \numberedsec 40615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let\subsection = \numberedsubsec 40625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let\subsubsection = \numberedsubsubsec 40635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 40645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 40655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz 40665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\appendixzzz#1{% 40675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 40685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\advance\appendixno by 1 40695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\chaplevelprefix{\appendixletter.}% 40705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \resetallfloatnos 40715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 40725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\appendixnum{\putwordAppendix\space \appendixletter}% 40735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \message{\appendixnum}% 40745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 40755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \chapmacro{#1}{Yappendix}{\appendixletter}% 40765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 40775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let\section = \appendixsec 40785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let\subsection = \appendixsubsec 40795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let\subsubsection = \appendixsubsubsec 40805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 40815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 40825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz 40835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnumberedzzz#1{% 40845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 40855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\advance\unnumberedno by 1 40865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 40875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Since an unnumbered has no number, no prefix for figures. 40885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let\chaplevelprefix = \empty 40895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \resetallfloatnos 40905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 40915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % This used to be simply \message{#1}, but TeX fully expands the 40925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % argument to \message. Therefore, if #1 contained @-commands, TeX 40935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % expanded them. For example, in `@unnumbered The @cite{Book}', TeX 40945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % expanded @cite (which turns out to cause errors because \cite is meant 40955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % to be executed, not expanded). 40965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 40975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Anyway, we don't want the fully-expanded definition of @cite to appear 40985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % as a result of the \message, we just want `@cite' itself. We use 40995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \the<toks register> to achieve this: TeX expands \the<toks> only once, 41005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % simply yielding the contents of <toks register>. (We also do this for 41015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % the toc entries.) 41025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \toks0 = {#1}% 41035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \message{(\the\toks0)}% 41045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 41055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \chapmacro{#1}{Ynothing}{\the\unnumberedno}% 41065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 41075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let\section = \unnumberedsec 41085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let\subsection = \unnumberedsubsec 41095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let\subsubsection = \unnumberedsubsubsec 41105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 41115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 41125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @centerchap is like @unnumbered, but the heading is centered. 41135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\centerchap{% 41145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Well, we could do the following in a group, but that would break 41155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % an assumption that \chapmacro is called at the outermost level. 41165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Thus we are safer this way: --kasal, 24feb04 41175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\centerparametersmaybe = \centerparameters 41185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \unnmhead0{#1}% 41195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\centerparametersmaybe = \relax 41205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 41215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 41225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @top is like @unnumbered. 41235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\top\unnumbered 41245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 41255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Sections. 41265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz 41275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\seczzz#1{% 41285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 41295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% 41305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 41315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 41325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz 41335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\appendixsectionzzz#1{% 41345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 41355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% 41365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 41375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\appendixsec\appendixsection 41385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 41395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz 41405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnumberedseczzz#1{% 41415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 41425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% 41435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 41445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 41455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Subsections. 41465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz 41475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\numberedsubseczzz#1{% 41485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\subsubsecno=0 \global\advance\subsecno by 1 41495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% 41505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 41515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 41525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz 41535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\appendixsubseczzz#1{% 41545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\subsubsecno=0 \global\advance\subsecno by 1 41555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \sectionheading{#1}{subsec}{Yappendix}% 41565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\appendixletter.\the\secno.\the\subsecno}% 41575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 41585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 41595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz 41605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnumberedsubseczzz#1{% 41615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\subsubsecno=0 \global\advance\subsecno by 1 41625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \sectionheading{#1}{subsec}{Ynothing}% 41635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\the\unnumberedno.\the\secno.\the\subsecno}% 41645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 41655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 41665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Subsubsections. 41675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz 41685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\numberedsubsubseczzz#1{% 41695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\advance\subsubsecno by 1 41705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \sectionheading{#1}{subsubsec}{Ynumbered}% 41715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% 41725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 41735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 41745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz 41755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\appendixsubsubseczzz#1{% 41765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\advance\subsubsecno by 1 41775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \sectionheading{#1}{subsubsec}{Yappendix}% 41785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% 41795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 41805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 41815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz 41825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnumberedsubsubseczzz#1{% 41835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\advance\subsubsecno by 1 41845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \sectionheading{#1}{subsubsec}{Ynothing}% 41855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% 41865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 41875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 41885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% These macros control what the section commands do, according 41895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to what kind of chapter we are in (ordinary, appendix, or unnumbered). 41905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define them by default for a numbered chapter. 41915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\section = \numberedsec 41925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\subsection = \numberedsubsec 41935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\subsubsection = \numberedsubsubsec 41945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 41955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define @majorheading, @heading and @subheading 41965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 41975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% NOTE on use of \vbox for chapter headings, section headings, and such: 41985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 1) We use \vbox rather than the earlier \line to permit 41995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% overlong headings to fold. 42005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 2) \hyphenpenalty is set to 10000 because hyphenation in a 42015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% heading is obnoxious; this forbids it. 42025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 3) Likewise, headings look best if no \parindent is used, and 42035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% if justification is not attempted. Hence \raggedright. 42045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 42055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 42065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\majorheading{% 42075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\advance\chapheadingskip by 10pt \chapbreak }% 42085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parsearg\chapheadingzzz 42095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 42105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 42115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapheading{\chapbreak \parsearg\chapheadingzzz} 42125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapheadingzzz#1{% 42135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 42145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parindent=0pt\raggedright 42155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \rm #1\hfill}}% 42165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \bigskip \par\penalty 200\relax 42175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \suppressfirstparagraphindent 42185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 42195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 42205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @heading, @subheading, @subsubheading. 42215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} 42225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \suppressfirstparagraphindent} 42235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} 42245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \suppressfirstparagraphindent} 42255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} 42265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \suppressfirstparagraphindent} 42275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 42285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% These macros generate a chapter, section, etc. heading only 42295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (including whitespace, linebreaking, etc. around it), 42305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% given all the information in convenient, parsed form. 42315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 42325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%%% Args are the skip and penalty (usually negative) 42335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} 42345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 42355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%%% Define plain chapter starts, and page on/off switching for it 42365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Parameter controlling skip before chapter headings (if needed) 42375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 42385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\chapheadingskip 42395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 42405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapbreak{\dobreak \chapheadingskip {-4000}} 42415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chappager{\par\vfill\supereject} 42425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} 42435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 42445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} 42455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 42465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\CHAPPAGoff{% 42475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\contentsalignmacro = \chappager 42485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\pchapsepmacro=\chapbreak 42495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\pagealignmacro=\chappager} 42505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 42515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\CHAPPAGon{% 42525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\contentsalignmacro = \chappager 42535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\pchapsepmacro=\chappager 42545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\pagealignmacro=\chappager 42555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\def\HEADINGSon{\HEADINGSsingle}} 42565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 42575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\CHAPPAGodd{% 42585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\contentsalignmacro = \chapoddpage 42595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\pchapsepmacro=\chapoddpage 42605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\pagealignmacro=\chapoddpage 42615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\def\HEADINGSon{\HEADINGSdouble}} 42625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 42635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\CHAPPAGon 42645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 42655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Chapter opening. 42665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 42675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is the text, #2 is the section type (Ynumbered, Ynothing, 42685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Yappendix, Yomitfromtoc), #3 the chapter number. 42695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 42705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% To test against our argument. 42715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Ynothingkeyword{Ynothing} 42725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Yomitfromtockeyword{Yomitfromtoc} 42735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Yappendixkeyword{Yappendix} 42745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 42755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapmacro#1#2#3{% 42765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pchapsepmacro 42775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 42785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \chapfonts \rm 42795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 42805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Have to define \thissection before calling \donoderef, because the 42815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % xref code eventually uses it. On the other hand, it has to be called 42825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % after \pchapsepmacro, or the headline will change too soon. 42835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\thissection{#1}% 42845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\thischaptername{#1}% 42855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 42865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Only insert the separating space if we have a chapter/appendix 42875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % number, and don't print the unnumbered ``number''. 42885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temptype{#2}% 42895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\temptype\Ynothingkeyword 42905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0 = \hbox{}% 42915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\toctype{unnchap}% 42925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\thischapter{#1}% 42935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifx\temptype\Yomitfromtockeyword 42945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0 = \hbox{}% contents like unnumbered, but no toc entry 42955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\toctype{omit}% 42965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \xdef\thischapter{}% 42975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifx\temptype\Yappendixkeyword 42985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% 42995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\toctype{app}% 43005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We don't substitute the actual chapter name into \thischapter 43015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % because we don't want its macros evaluated now. And we don't 43025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % use \thissection because that changes with each section. 43035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 43045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \xdef\thischapter{\putwordAppendix{} \appendixletter: 43055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noexpand\thischaptername}% 43065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 43075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0 = \hbox{#3\enspace}% 43085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\toctype{numchap}% 43095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \xdef\thischapter{\putwordChapter{} \the\chapno: 43105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noexpand\thischaptername}% 43115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi\fi\fi 43125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 43135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Write the toc entry for this chapter. Must come before the 43145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \donoderef, because we include the current node name in the toc 43155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % entry, and \donoderef resets it to empty. 43165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \writetocentry{\toctype}{#1}{#3}% 43175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 43185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % For pdftex, we have to write out the node definition (aka, make 43195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % the pdfdest) after any page break, but before the actual text has 43205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % been typeset. If the destination for the pdf outline is after the 43215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % text, then jumping from the outline may wind up with the text not 43225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % being visible, for instance under high magnification. 43235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \donoderef{#2}% 43245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 43255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Typeset the actual heading. 43265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright 43275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hangindent=\wd0 \centerparametersmaybe 43285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \unhbox0 #1\par}% 43295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 43305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nobreak\bigskip % no page break after a chapter title 43315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nobreak 43325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 43335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 43345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @centerchap -- centered and unnumbered. 43355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\centerparametersmaybe = \relax 43365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\centerparameters{% 43375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\rightskip by 3\rightskip 43385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \leftskip = \rightskip 43395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parfillskip = 0pt 43405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 43415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 43425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 43435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% I don't think this chapter style is supported any more, so I'm not 43445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% updating it with the new noderef stuff. We'll see. --karl, 11aug03. 43455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 43465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} 43475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 43485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnchfopen #1{% 43495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 43505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parindent=0pt\raggedright 43515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \rm #1\hfill}}\bigskip \par\nobreak 43525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 43535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chfopen #1#2{\chapoddpage {\chapfonts 43545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% 43555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\par\penalty 5000 % 43565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 43575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\centerchfopen #1{% 43585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 43595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parindent=0pt 43605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hfill {\rm #1}\hfill}}\bigskip \par\nobreak 43615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 43625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\CHAPFopen{% 43635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let\chapmacro=\chfopen 43645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let\centerchapmacro=\centerchfopen} 43655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 43665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 43675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Section titles. These macros combine the section number parts and 43685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% call the generic \sectionheading to do the printing. 43695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 43705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\secheadingskip 43715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\secheadingbreak{\dobreak \secheadingskip{-1000}} 43725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 43735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Subsection titles. 43745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\subsecheadingskip 43755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} 43765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 43775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Subsubsection titles. 43785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\subsubsecheadingskip{\subsecheadingskip} 43795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\subsubsecheadingbreak{\subsecheadingbreak} 43805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 43815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 43825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Print any size, any type, section title. 43835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 43845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is 43855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the 43865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% section number. 43875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 43885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\sectionheading#1#2#3#4{% 43895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 43905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Switch to the right set of fonts. 43915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \csname #2fonts\endcsname \rm 43925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 43935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Insert space above the heading. 43945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \csname #2headingbreak\endcsname 43955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 43965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Only insert the space after the number if we have a section number. 43975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\sectionlevel{#2}% 43985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temptype{#3}% 43995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 44005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\temptype\Ynothingkeyword 44015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0 = \hbox{}% 44025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\toctype{unn}% 44035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\thissection{#1}% 44045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifx\temptype\Yomitfromtockeyword 44055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % for @headings -- no section number, don't include in toc, 44065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % and don't redefine \thissection. 44075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0 = \hbox{}% 44085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\toctype{omit}% 44095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\sectionlevel=\empty 44105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else\ifx\temptype\Yappendixkeyword 44115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0 = \hbox{#4\enspace}% 44125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\toctype{app}% 44135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\thissection{#1}% 44145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 44155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0 = \hbox{#4\enspace}% 44165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\toctype{num}% 44175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\thissection{#1}% 44185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi\fi\fi 44195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 44205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Write the toc entry (before \donoderef). See comments in \chfplain. 44215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \writetocentry{\toctype\sectionlevel}{#1}{#4}% 44225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 44235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Write the node reference (= pdf destination for pdftex). 44245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Again, see comments in \chfplain. 44255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \donoderef{#3}% 44265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 44275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Output the actual section heading. 44285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright 44295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hangindent=\wd0 % zero if no section number 44305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \unhbox0 #1}% 44315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 44325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Add extra space after the heading -- half of whatever came above it. 44335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Don't allow stretch, though. 44345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \kern .5 \csname #2headingskip\endcsname 44355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 44365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Do not let the kern be a potential breakpoint, as it would be if it 44375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % was followed by glue. 44385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nobreak 44395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 44405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We'll almost certainly start a paragraph next, so don't let that 44415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % glue accumulate. (Not a breakpoint because it's preceded by a 44425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % discardable item.) 44435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip-\parskip 44445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 44455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % This is purely so the last item on the list is a known \penalty > 44465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 10000. This is so \startdefun can avoid allowing breakpoints after 44475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % section headings. Otherwise, it would insert a valid breakpoint between: 44485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 44495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % @section sec-whatever 44505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % @deffn def-whatever 44515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \penalty 10001 44525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 44535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 44545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 44555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{toc,} 44565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Table of contents. 44575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newwrite\tocfile 44585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 44595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Write an entry to the toc file, opening it if necessary. 44605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Called from @chapter, etc. 44615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 44625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} 44635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We append the current node name (if any) and page number as additional 44645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% arguments for the \{chap,sec,...}entry macros which will eventually 44655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% read this. The node name is used in the pdf outlines as the 44665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% destination to jump to. 44675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 44685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We open the .toc file for writing here instead of at @setfilename (or 44695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% any other fixed time) so that @contents can be anywhere in the document. 44705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% But if #1 is `omit', then we don't do anything. This is used for the 44715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% table of contents chapter openings themselves. 44725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 44735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\iftocfileopened 44745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\omitkeyword{omit}% 44755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 44765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\writetocentry#1#2#3{% 44775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\writetoctype{#1}% 44785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\writetoctype\omitkeyword \else 44795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \iftocfileopened\else 44805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \immediate\openout\tocfile = \jobname.toc 44815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\tocfileopenedtrue 44825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 44835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 44845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \iflinks 44855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \toks0 = {#2}% 44865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \toks2 = \expandafter{\lastnode}% 44875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}{#3}% 44885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\the\toks2}{\noexpand\folio}}}% 44895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \temp 44905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 44915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 44925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 44935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Tell \shipout to create a pdf destination on each page, if we're 44945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % writing pdf. These are used in the table of contents. We can't 44955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % just write one on every page because the title pages are numbered 44965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 1 and 2 (the page numbers aren't printed), and so are the first 44975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % two pages of the document. Thus, we'd have two destinations named 44985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % `1', and two named `2'. 44995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifpdf \global\pdfmakepagedesttrue \fi 45005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 45015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 45025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\contentsrightmargin \contentsrightmargin=1in 45035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\savepageno 45045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\lastnegativepageno \lastnegativepageno = -1 45055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 45065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Prepare to read what we've written to \tocfile. 45075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 45085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\startcontents#1{% 45095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If @setchapternewpage on, and @headings double, the contents should 45105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % start on an odd page, unlike chapters. Thus, we maintain 45115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \contentsalignmacro in parallel with \pagealignmacro. 45125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % From: Torbjorn Granlund <tege@matematik.su.se> 45135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \contentsalignmacro 45145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \immediate\closeout\tocfile 45155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 45165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Don't need to put `Contents' or `Short Contents' in the headline. 45175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % It is abundantly clear what they are. 45185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\thischapter{}% 45195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \chapmacro{#1}{Yomitfromtoc}{}% 45205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 45215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \savepageno = \pageno 45225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \begingroup % Set up to handle contents files properly. 45235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 45245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We can't do this, because then an actual ^ in a section 45255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97. 45265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi 45275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \raggedbottom % Worry more about breakpoints than the bottom. 45285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\hsize by -\contentsrightmargin % Don't use the full line length. 45295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 45305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Roman numerals for page numbers. 45315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi 45325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 45335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 45345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 45355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Normal (long) toc. 45365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\contents{% 45375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \startcontents{\putwordTOC}% 45385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \openin 1 \jobname.toc 45395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifeof 1 \else 45405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \input \jobname.toc 45415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 45425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vfill \eject 45435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \contentsalignmacro % in case @setchapternewpage odd is in effect 45445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifeof 1 \else 45455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pdfmakeoutlines 45465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 45475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \closein 1 45485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup 45495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \lastnegativepageno = \pageno 45505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\pageno = \savepageno 45515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 45525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 45535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% And just the chapters. 45545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\summarycontents{% 45555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \startcontents{\putwordShortTOC}% 45565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 45575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\numchapentry = \shortchapentry 45585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\appentry = \shortchapentry 45595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\unnchapentry = \shortunnchapentry 45605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We want a true roman here for the page numbers. 45615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \secfonts 45625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\rm=\shortcontrm \let\bf=\shortcontbf 45635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\sl=\shortcontsl \let\tt=\shortconttt 45645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \rm 45655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hyphenpenalty = 10000 45665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\baselineskip by 1pt % Open it up a little. 45675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\numsecentry##1##2##3##4{} 45685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\appsecentry = \numsecentry 45695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\unnsecentry = \numsecentry 45705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\numsubsecentry = \numsecentry 45715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\appsubsecentry = \numsecentry 45725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\unnsubsecentry = \numsecentry 45735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\numsubsubsecentry = \numsecentry 45745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\appsubsubsecentry = \numsecentry 45755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\unnsubsubsecentry = \numsecentry 45765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \openin 1 \jobname.toc 45775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifeof 1 \else 45785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \input \jobname.toc 45795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 45805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \closein 1 45815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vfill \eject 45825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \contentsalignmacro % in case @setchapternewpage odd is in effect 45835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup 45845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \lastnegativepageno = \pageno 45855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\pageno = \savepageno 45865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 45875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\shortcontents = \summarycontents 45885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 45895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Typeset the label for a chapter or appendix for the short contents. 45905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The arg is, e.g., `A' for an appendix, or `3' for a chapter. 45915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 45925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\shortchaplabel#1{% 45935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % This space should be enough, since a single number is .5em, and the 45945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % widest letter (M) is 1em, at least in the Computer Modern fonts. 45955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % But use \hss just in case. 45965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % (This space doesn't include the extra space that gets added after 45975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % the label; that gets put in by \shortchapentry above.) 45985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 45995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We'd like to right-justify chapter numbers, but that looks strange 46005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % with appendix letters. And right-justifying numbers and 46015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % left-justifying letters looks strange when there is less than 10 46025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % chapters. Have to read the whole toc once to know how many chapters 46035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % there are before deciding ... 46045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hbox to 1em{#1\hss}% 46055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 46065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 46075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% These macros generate individual entries in the table of contents. 46085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The first argument is the chapter or section name. 46095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The last argument is the page number. 46105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The arguments in between are the chapter number, section number, ... 46115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 46125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Chapters, in the main contents. 46135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} 46145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 46155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Chapters, in the short toc. 46165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% See comments in \dochapentry re vbox and related settings. 46175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\shortchapentry#1#2#3#4{% 46185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% 46195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 46205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 46215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Appendices, in the main contents. 46225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Need the word Appendix, and a fixed-size box. 46235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 46245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\appendixbox#1{% 46255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We use M since it's probably the widest letter. 46265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0 = \hbox{\putwordAppendix{} M}% 46275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hbox to \wd0{\putwordAppendix{} #1\hss}} 46285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 46295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} 46305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 46315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Unnumbered chapters. 46325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} 46335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} 46345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 46355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Sections. 46365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} 46375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\appsecentry=\numsecentry 46385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} 46395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 46405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Subsections. 46415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} 46425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\appsubsecentry=\numsubsecentry 46435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} 46445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 46455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% And subsubsections. 46465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} 46475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\appsubsubsecentry=\numsubsubsecentry 46485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} 46495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 46505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This parameter controls the indentation of the various levels. 46515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Same as \defaultparindent. 46525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\tocindent \tocindent = 15pt 46535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 46545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Now for the actual typesetting. In all these, #1 is the text and #2 is the 46555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% page number. 46565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 46575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If the toc has to be broken over pages, we want it to be at chapters 46585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% if at all possible; hence the \penalty. 46595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dochapentry#1#2{% 46605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip 46615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \begingroup 46625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \chapentryfonts 46635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tocentry{#1}{\dopageno\bgroup#2\egroup}% 46645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup 46655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nobreak\vskip .25\baselineskip plus.1\baselineskip 46665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 46675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 46685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dosecentry#1#2{\begingroup 46695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \secentryfonts \leftskip=\tocindent 46705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tocentry{#1}{\dopageno\bgroup#2\egroup}% 46715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup} 46725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 46735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dosubsecentry#1#2{\begingroup 46745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \subsecentryfonts \leftskip=2\tocindent 46755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tocentry{#1}{\dopageno\bgroup#2\egroup}% 46765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup} 46775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 46785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dosubsubsecentry#1#2{\begingroup 46795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \subsubsecentryfonts \leftskip=3\tocindent 46805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tocentry{#1}{\dopageno\bgroup#2\egroup}% 46815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup} 46825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 46835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We use the same \entry macro as for the index entries. 46845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\tocentry = \entry 46855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 46865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Space between chapter (or whatever) number and the title. 46875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\labelspace{\hskip1em \relax} 46885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 46895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dopageno#1{{\rm #1}} 46905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doshortpageno#1{{\rm #1}} 46915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 46925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapentryfonts{\secfonts \rm} 46935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\secentryfonts{\textfonts} 46945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\subsecentryfonts{\textfonts} 46955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\subsubsecentryfonts{\textfonts} 46965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 46975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 46985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{environments,} 46995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @foo ... @end foo. 47005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 47015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. 47025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 47035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Since these characters are used in examples, it should be an even number of 47045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \tt widths. Each \tt character is 1en, so two makes it 1em. 47055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 47065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\point{$\star$} 47075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} 47085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} 47095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} 47105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} 47115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 47125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The @error{} command. 47135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Adapted from the TeXbook's \boxit. 47145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 47155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newbox\errorbox 47165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 47175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\tentt \global\dimen0 = 3em}% Width of the box. 47185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\dimen2 = .55pt % Thickness of rules 47195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The text. (`r' is open on the right, `e' somewhat less so on the left.) 47205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} 47215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 47225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setbox\errorbox=\hbox to \dimen0{\hfil 47235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. 47245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\hsize by -2\dimen2 % Rules. 47255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vbox{% 47265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hrule height\dimen2 47275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. 47285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. 47295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \kern3pt\vrule width\dimen2}% Space to right. 47305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hrule height\dimen2} 47315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hfil} 47325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 47335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\error{\leavevmode\lower.7ex\copy\errorbox} 47345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 47355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @tex ... @end tex escapes into raw Tex temporarily. 47365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% One exception: @ is still an escape character, so that @end tex works. 47375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% But \@ or @@ will get a plain tex @ character. 47385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 47395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\tex{% 47405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 47415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 47425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie 47435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode `\%=14 47445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode `\+=\other 47455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode `\"=\other 47465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode `\|=\other 47475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode `\<=\other 47485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode `\>=\other 47495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \escapechar=`\\ 47505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 47515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\b=\ptexb 47525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\bullet=\ptexbullet 47535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\c=\ptexc 47545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\,=\ptexcomma 47555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\.=\ptexdot 47565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\dots=\ptexdots 47575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\equiv=\ptexequiv 47585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\!=\ptexexclam 47595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\i=\ptexi 47605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\indent=\ptexindent 47615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\noindent=\ptexnoindent 47625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\{=\ptexlbrace 47635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\+=\tabalign 47645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\}=\ptexrbrace 47655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\/=\ptexslash 47665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\*=\ptexstar 47675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\t=\ptext 47685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 47695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% 47705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% 47715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\@{@}% 47725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 47735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% There is no need to define \Etex. 47745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 47755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define @lisp ... @end lisp. 47765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @lisp environment forms a group so it can rebind things, 47775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% including the definition of @end lisp (which normally is erroneous). 47785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 47795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Amount to narrow the margins by for @lisp. 47805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\lispnarrowing \lispnarrowing=0.4in 47815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 47825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This is the definition that ^^M gets inside @lisp, @example, and other 47835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% such environments. \null is better than a space, since it doesn't 47845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% have any width. 47855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\lisppar{\null\endgraf} 47865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 47875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This space is always present above and below environments. 47885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\envskipamount \envskipamount = 0pt 47895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 47905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Make spacing and below environment symmetrical. We use \parskip here 47915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to help in doing that, since in @example-like environments \parskip 47925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% is reset to zero; thus the \afterenvbreak inserts no space -- but the 47935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% start of the next paragraph will insert \parskip. 47945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 47955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\aboveenvbreak{{% 47965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % =10000 instead of <10000 because of a special case in \itemzzz and 47975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \sectionheading, q.v. 47985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum \lastpenalty=10000 \else 47995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\envskipamount by \parskip 48005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgraf 48015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifdim\lastskip<\envskipamount 48025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \removelastskip 48035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % it's not a good place to break if the last penalty was \nobreak 48045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % or better ... 48055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\lastpenalty<10000 \penalty-50 \fi 48065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip\envskipamount 48075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 48085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 48095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}} 48105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 48115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\afterenvbreak = \aboveenvbreak 48125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 48135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins. 48145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\nonarrowing=\relax 48155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 48165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @cartouche ... @end cartouche: draw rectangle w/rounded corners around 48175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% environment contents. 48185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\circle=lcircle10 48195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\circthick 48205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\cartouter\newdimen\cartinner 48215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\normbskip\newskip\normpskip\newskip\normlskip 48225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\circthick=\fontdimen8\circle 48235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 48245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth 48255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ctr{{\hskip 6pt\circle\char'010}} 48265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\cbl{{\circle\char'012\hskip -6pt}} 48275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\cbr{{\hskip 6pt\circle\char'011}} 48285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\carttop{\hbox to \cartouter{\hskip\lskip 48295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ctl\leaders\hrule height\circthick\hfil\ctr 48305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hskip\rskip}} 48315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\cartbot{\hbox to \cartouter{\hskip\lskip 48325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \cbl\leaders\hrule height\circthick\hfil\cbr 48335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hskip\rskip}} 48345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 48355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\lskip\newskip\rskip 48365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 48375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\cartouche{% 48385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifhmode\par\fi % can't be in the midst of a paragraph. 48395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \startsavinginserts 48405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \lskip=\leftskip \rskip=\rightskip 48415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \leftskip=0pt\rightskip=0pt % we want these *outside*. 48425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \cartinner=\hsize \advance\cartinner by-\lskip 48435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\cartinner by-\rskip 48445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \cartouter=\hsize 48455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\cartouter by 18.4pt % allow for 3pt kerns on either 48465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % side, and for 6pt waste from 48475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % each corner char, and rule thickness 48485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip 48495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Flag to tell @lisp, etc., not to narrow margin. 48505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\nonarrowing=\comment 48515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vbox\bgroup 48525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \baselineskip=0pt\parskip=0pt\lineskip=0pt 48535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \carttop 48545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hbox\bgroup 48555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hskip\lskip 48565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vrule\kern3pt 48575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vbox\bgroup 48585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \kern3pt 48595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hsize=\cartinner 48605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \baselineskip=\normbskip 48615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \lineskip=\normlskip 48625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parskip=\normpskip 48635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip -\parskip 48645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \comment % For explanation, see the end of \def\group. 48655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 48665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Ecartouche{% 48675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifhmode\par\fi 48685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \kern3pt 48695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \egroup 48705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \kern3pt\vrule 48715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hskip\rskip 48725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \egroup 48735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \cartbot 48745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \egroup 48755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \checkinserts 48765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 48775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 48785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 48795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This macro is called at the beginning of all the @example variants, 48805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% inside a group. 48815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\nonfillstart{% 48825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \aboveenvbreak 48835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hfuzz = 12pt % Don't be fussy 48845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \sepspaces % Make spaces be word-separators rather than space tokens. 48855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\par = \lisppar % don't ignore blank lines 48865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \obeylines % each line of input is a line of output 48875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parskip = 0pt 48885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parindent = 0pt 48895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \emergencystretch = 0pt % don't try to avoid overfull boxes 48905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % @cartouche defines \nonarrowing to inhibit narrowing 48915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % at next level down. 48925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\nonarrowing\relax 48935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance \leftskip by \lispnarrowing 48945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \exdentamount=\lispnarrowing 48955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 48965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\exdent=\nofillexdent 48975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 48985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 48995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If you want all examples etc. small: @set dispenvsize small. 49005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If you want even small examples the full size: @set dispenvsize nosmall. 49015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This affects the following displayed environments: 49025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @example, @display, @format, @lisp 49035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 49045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smallword{small} 49055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\nosmallword{nosmall} 49065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\SETdispenvsize\relax 49075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setnormaldispenv{% 49085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\SETdispenvsize\smallword 49095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \smallexamplefonts \rm 49105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 49115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 49125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setsmalldispenv{% 49135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\SETdispenvsize\nosmallword 49145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 49155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \smallexamplefonts \rm 49165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 49175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 49185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 49195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We often define two environments, @foo and @smallfoo. 49205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Let's do it by one command: 49215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\makedispenv #1#2{ 49225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} 49235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} 49245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\let\csname E#1\endcsname \afterenvbreak 49255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\let\csname Esmall#1\endcsname \afterenvbreak 49265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 49275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 49285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define two synonyms: 49295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\maketwodispenvs #1#2#3{ 49305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \makedispenv{#1}{#3} 49315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \makedispenv{#2}{#3} 49325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 49335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 49345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @lisp: indented, narrowed, typewriter font; @example: same as @lisp. 49355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 49365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @smallexample and @smalllisp: use smaller fonts. 49375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Originally contributed by Pavel@xerox. 49385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 49395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\maketwodispenvs {lisp}{example}{% 49405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nonfillstart 49415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tt 49425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. 49435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gobble % eat return 49445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 49455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 49465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @display/@smalldisplay: same as @lisp except keep current font. 49475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 49485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedispenv {display}{% 49495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nonfillstart 49505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gobble 49515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 49525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 49535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @format/@smallformat: same as @display except don't narrow margins. 49545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 49555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedispenv{format}{% 49565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\nonarrowing = t% 49575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nonfillstart 49585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gobble 49595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 49605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 49615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @flushleft: same as @format, but doesn't obey \SETdispenvsize. 49625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\flushleft{% 49635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\nonarrowing = t% 49645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nonfillstart 49655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gobble 49665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 49675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\Eflushleft = \afterenvbreak 49685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 49695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @flushright. 49705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 49715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\flushright{% 49725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\nonarrowing = t% 49735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nonfillstart 49745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\leftskip by 0pt plus 1fill 49755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gobble 49765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 49775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\Eflushright = \afterenvbreak 49785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 49795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 49805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @quotation does normal linebreaking (hence we can't use \nonfillstart) 49815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and narrows the margins. We keep \parskip nonzero in general, since 49825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% we're doing normal filling. So, when using \aboveenvbreak and 49835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \afterenvbreak, temporarily make \parskip 0. 49845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 49855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\quotation{% 49865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip 49875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parindent=0pt 49885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 49895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % @cartouche defines \nonarrowing to inhibit narrowing at next level down. 49905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\nonarrowing\relax 49915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\leftskip by \lispnarrowing 49925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\rightskip by \lispnarrowing 49935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \exdentamount = \lispnarrowing 49945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\nonarrowing = \relax 49955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 49965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parsearg\quotationlabel 49975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 49985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 49995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We have retained a nonzero parskip for the environment, since we're 50005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% doing normal filling. 50015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 50025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Equotation{% 50035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \par 50045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\quotationauthor\undefined\else 50055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % indent a bit. 50065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \leftline{\kern 2\leftskip \sl ---\quotationauthor}% 50075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 50085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\parskip=0pt \afterenvbreak}% 50095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 50105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 50115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If we're given an argument, typeset it in bold with a colon after. 50125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\quotationlabel#1{% 50135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temp{#1}% 50145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\temp\empty \else 50155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\bf #1: }% 50165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 50175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 50185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 50195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 50205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>} 50215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If we want to allow any <char> as delimiter, 50225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% we need the curly braces so that makeinfo sees the @verb command, eg: 50235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org 50245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 50255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. 50265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 50275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% [Knuth] p.344; only we need to do the other characters Texinfo sets 50285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% active too. Otherwise, they get lost as the first character on a 50295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% verbatim line. 50305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dospecials{% 50315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \do\ \do\\\do\{\do\}\do\$\do\&% 50325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% 50335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \do\<\do\>\do\|\do\@\do+\do\"% 50345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 50355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 50365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% [Knuth] p. 380 50375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\uncatcodespecials{% 50385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\do##1{\catcode`##1=\other}\dospecials} 50395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 50405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% [Knuth] pp. 380,381,391 50415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Disable Spanish ligatures ?` and !` of \tt font 50425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\begingroup 50435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\`=\active\gdef`{\relax\lq} 50445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup 50455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 50465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Setup for the @verb command. 50475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 50485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Eight spaces for a tab 50495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\begingroup 50505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^I=\active 50515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} 50525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup 50535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 50545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setupverb{% 50555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tt % easiest (and conventionally used) font for verbatim 50565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\par{\leavevmode\endgraf}% 50575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\`=\active 50585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tabeightspaces 50595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Respect line breaks, 50605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % print special symbols as themselves, and 50615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % make each space count 50625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % must do in this order: 50635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \obeylines \uncatcodespecials \sepspaces 50645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 50655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 50665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Setup for the @verbatim environment 50675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 50685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Real tab expansion 50695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount 50705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 50715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\starttabbox{\setbox0=\hbox\bgroup} 50725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\begingroup 50735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^I=\active 50745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\tabexpand{% 50755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^I=\active 50765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def^^I{\leavevmode\egroup 50775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dimen0=\wd0 % the width so far, or since the previous tab 50785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \divide\dimen0 by\tabw 50795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \multiply\dimen0 by\tabw % compute previous multiple of \tabw 50805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\dimen0 by\tabw % advance to next multiple of \tabw 50815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \wd0=\dimen0 \box0 \starttabbox 50825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 50835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } 50845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup 50855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setupverbatim{% 50865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nonfillstart 50875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\leftskip by -\defbodyindent 50885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Easiest (and conventionally used) font for verbatim 50895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tt 50905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\par{\leavevmode\egroup\box0\endgraf}% 50915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\`=\active 50925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tabexpand 50935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Respect line breaks, 50945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % print special symbols as themselves, and 50955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % make each space count 50965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % must do in this order: 50975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \obeylines \uncatcodespecials \sepspaces 50985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \everypar{\starttabbox}% 50995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 51005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 51015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Do the @verb magic: verbatim text is quoted by unique 51025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% delimiter characters. Before first delimiter expect a 51035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% right brace, after last delimiter expect closing brace: 51045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 51055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \def\doverb'{'<char>#1<char>'}'{#1} 51065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 51075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% [Knuth] p. 382; only eat outer {} 51085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\begingroup 51095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other 51105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] 51115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup 51125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 51135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\verb{\begingroup\setupverb\doverb} 51145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 51155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 51165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Do the @verbatim magic: define the macro \doverbatim so that 51175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the (first) argument ends when '@end verbatim' is reached, ie: 51185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 51195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \def\doverbatim#1@end verbatim{#1} 51205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 51215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For Texinfo it's a lot easier than for LaTeX, 51225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% because texinfo's \verbatim doesn't stop at '\end{verbatim}': 51235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% we need not redefine '\', '{' and '}'. 51245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 51255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Inspired by LaTeX's verbatim command set [latex.ltx] 51265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 51275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\begingroup 51285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\ =\active 51295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \obeylines % 51305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % ignore everything up to the first ^^M, that's the newline at the end 51315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % of the @verbatim input line itself. Otherwise we get an extra blank 51325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % line in the output. 51335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% 51345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We really want {...\end verbatim} in the body of the macro, but 51355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % without the active space; thus we have to use \xdef and \gobble. 51365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup 51375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 51385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\verbatim{% 51395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setupverbatim\doverbatim 51405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 51415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\Everbatim = \afterenvbreak 51425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 51435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 51445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @verbatiminclude FILE - insert text of file in verbatim environment. 51455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 51465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} 51475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 51485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doverbatiminclude#1{% 51495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 51505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \makevalueexpandable 51515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setupverbatim 51525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \input #1 51535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \afterenvbreak 51545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 51555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 51565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 51575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @copying ... @end copying. 51585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Save the text away for @insertcopying later. 51595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 51605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We save the uninterpreted tokens, rather than creating a box. 51615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Saving the text in a box would be much easier, but then all the 51625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% typesetting commands (@smallbook, font changes, etc.) have to be done 51635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% beforehand -- and a) we want @copying to be done first in the source 51645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% file; b) letting users define the frontmatter in as flexible order as 51655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% possible is very desirable. 51665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 51675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\copying{\checkenv{}\begingroup\scanargctxt\docopying} 51685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} 51695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 51705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\insertcopying{% 51715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \begingroup 51725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parindent = 0pt % paragraph indentation looks wrong on title page 51735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \scanexp\copyingtext 51745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup 51755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 51765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 51775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{defuns,} 51785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @defun etc. 51795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 51805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\defbodyindent \defbodyindent=.4in 51815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\defargsindent \defargsindent=50pt 51825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\deflastargmargin \deflastargmargin=18pt 51835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 51845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Start the processing of @deffn: 51855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\startdefun{% 51865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\lastpenalty<10000 51875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \medbreak 51885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 51895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If there are two @def commands in a row, we'll have a \nobreak, 51905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % which is there to keep the function description together with its 51915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % header. But if there's nothing but headers, we need to allow a 51925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % break somewhere. Check specifically for penalty 10002, inserted 51935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % by \defargscommonending, instead of 10000, since the sectioning 51945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % commands also insert a nobreak penalty, and we don't want to allow 51955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % a break between a section heading and a defun. 51965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 51975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\lastpenalty=10002 \penalty2000 \fi 51985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 51995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Similarly, after a section heading, do not allow a break. 52005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % But do insert the glue. 52015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \medskip % preceded by discardable penalty, so not a breakpoint 52025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 52035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 52045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parindent=0in 52055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\leftskip by \defbodyindent 52065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \exdentamount=\defbodyindent 52075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 52085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 52095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dodefunx#1{% 52105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % First, check whether we are in the right environment: 52115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \checkenv#1% 52125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 52135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % As above, allow line break if we have multiple x headers in a row. 52145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % It's not a great place, though. 52155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\lastpenalty=10002 \penalty3000 \fi 52165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 52175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % And now, it's time to reuse the body of the original defun: 52185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\gobbledefun#1% 52195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 52205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\gobbledefun#1\startdefun{} 52215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 52225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \printdefunline \deffnheader{text} 52235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 52245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\printdefunline#1#2{% 52255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \begingroup 52265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % call \deffnheader: 52275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project #1#2 \endheader 52285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % common ending: 52295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \interlinepenalty = 10000 52305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\rightskip by 0pt plus 1fil 52315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgraf 52325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nobreak\vskip -\parskip 52335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \penalty 10002 % signal to \startdefun and \dodefunx 52345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Some of the @defun-type tags do not enable magic parentheses, 52355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % rendering the following check redundant. But we don't optimize. 52365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \checkparencounts 52375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup 52385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 52395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 52405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Edefun{\endgraf\medbreak} 52415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 52425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; 52435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the only thing remainnig is to define \deffnheader. 52445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 52455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\makedefun#1{% 52465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\let\csname E#1\endcsname = \Edefun 52475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\temp{\noexpand\domakedefun 52485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% 52495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \temp 52505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 52515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 52525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \domakedefun \deffn \deffnx \deffnheader 52535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 52545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define \deffn and \deffnx, without parameters. 52555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \deffnheader has to be defined explicitly. 52565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 52575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\domakedefun#1#2#3{% 52585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \envdef#1{% 52595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \startdefun 52605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parseargusing\activeparens{\printdefunline#3}% 52615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 52625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def#2{\dodefunx#1}% 52635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def#3% 52645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 52655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 52665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%%% Untyped functions: 52675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 52685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @deffn category name args 52695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deffn}{\deffngeneral{}} 52705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 52715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @deffn category class name args 52725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defop}#1 {\defopon{#1\ \putwordon}} 52735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 52745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \defopon {category on}class name args 52755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } 52765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 52775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \deffngeneral {subind}category name args 52785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 52795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\deffngeneral#1#2 #3 #4\endheader{% 52805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. 52815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dosubind{fn}{\code{#3}}{#1}% 52825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% 52835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 52845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 52855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%%% Typed functions: 52865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 52875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @deftypefn category type name args 52885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deftypefn}{\deftypefngeneral{}} 52895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 52905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @deftypeop category class type name args 52915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} 52925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 52935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \deftypeopon {category on}class type name args 52945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } 52955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 52965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \deftypefngeneral {subind}category type name args 52975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 52985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\deftypefngeneral#1#2 #3 #4 #5\endheader{% 52995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dosubind{fn}{\code{#4}}{#1}% 53005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \defname{#2}{#3}{#4}\defunargs{#5\unskip}% 53015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 53025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 53035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%%% Typed variables: 53045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 53055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @deftypevr category type var args 53065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deftypevr}{\deftypecvgeneral{}} 53075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 53085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @deftypecv category class type var args 53095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} 53105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 53115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \deftypecvof {category of}class type var args 53125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } 53135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 53145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \deftypecvgeneral {subind}category type var args 53155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 53165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% 53175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dosubind{vr}{\code{#4}}{#1}% 53185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \defname{#2}{#3}{#4}\defunargs{#5\unskip}% 53195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 53205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 53215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%%% Untyped variables: 53225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 53235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @defvr category var args 53245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defvr}#1 {\deftypevrheader{#1} {} } 53255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 53265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @defcv category class var args 53275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} 53285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 53295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \defcvof {category of}class var args 53305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } 53315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 53325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%%% Type: 53335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @deftp category name args 53345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deftp}#1 #2 #3\endheader{% 53355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \doind{tp}{\code{#2}}% 53365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \defname{#1}{}{#2}\defunargs{#3\unskip}% 53375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 53385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 53395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Remaining @defun-like shortcuts: 53405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defun}{\deffnheader{\putwordDeffunc} } 53415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defmac}{\deffnheader{\putwordDefmac} } 53425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defspec}{\deffnheader{\putwordDefspec} } 53435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } 53445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defvar}{\defvrheader{\putwordDefvar} } 53455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defopt}{\defvrheader{\putwordDefopt} } 53465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } 53475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defmethod}{\defopon\putwordMethodon} 53485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deftypemethod}{\deftypeopon\putwordMethodon} 53495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defivar}{\defcvof\putwordInstanceVariableof} 53505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} 53515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 53525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \defname, which formats the name of the @def (not the args). 53535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is the category, such as "Function". 53545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #2 is the return type, if any. 53555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #3 is the function name. 53565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 53575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We are followed by (but not passed) the arguments, if any. 53585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 53595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\defname#1#2#3{% 53605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Get the values of \leftskip and \rightskip as they were outside the @def... 53615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\leftskip by -\defbodyindent 53625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 53635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % How we'll format the type name. Putting it in brackets helps 53645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % distinguish it from the body text that may end up on the next line 53655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % just below it. 53665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temp{#1}% 53675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} 53685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 53695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Figure out line sizes for the paragraph shape. 53705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % The first line needs space for \box0; but if \rightskip is nonzero, 53715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % we need only space for the part of \box0 which exceeds it: 53725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip 53735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % The continuations: 53745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dimen2=\hsize \advance\dimen2 by -\defargsindent 53755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % (plain.tex says that \dimen1 should be used only as global.) 53765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parshape 2 0in \dimen0 \defargsindent \dimen2 53775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 53785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Put the type name to the right margin. 53795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noindent 53805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hbox to 0pt{% 53815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hfil\box0 \kern-\hsize 53825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \hsize has to be shortened this way: 53835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \kern\leftskip 53845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Intentionally do not respect \rightskip, since we need the space. 53855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 53865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 53875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Allow all lines to be underfull without complaint: 53885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tolerance=10000 \hbadness=10000 53895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \exdentamount=\defbodyindent 53905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 53915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % defun fonts. We use typewriter by default (used to be bold) because: 53925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % . we're printing identifiers, they should be in tt in principle. 53935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % . in languages with many accents, such as Czech or French, it's 53945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % common to leave accents off identifiers. The result looks ok in 53955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % tt, but exceedingly strange in rm. 53965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % . we don't want -- and --- to be treated as ligatures. 53975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % . this still does not fix the ?` and !` ligatures, but so far no 53985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % one has made identifiers using them :). 53995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \df \tt 54005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temp{#2}% return value type 54015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\temp\empty\else \tclose{\temp} \fi 54025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project #3% output function name 54035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 54045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\rm\enskip}% hskip 0.5 em of \tenrm 54055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 54065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \boldbrax 54075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % arguments will be output next, if any. 54085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 54095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 54105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Print arguments in slanted roman (not ttsl), inconsistently with using 54115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% tt for the name. This is because literal text is sometimes needed in 54125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the argument list (groff manual), and ttsl and tt are not very 54135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% distinguishable. Prevent hyphenation at `-' chars. 54145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 54155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\defunargs#1{% 54165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % use sl by default (not ttsl), 54175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % tt for the names. 54185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \df \sl \hyphenchar\font=0 54195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 54205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % On the other hand, if an argument has two dashes (for instance), we 54215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % want a way to get ttsl. Let's try @var for that. 54225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\var=\ttslanted 54235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project #1% 54245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \sl\hyphenchar\font=45 54255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 54265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 54275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We want ()&[] to print specially on the defun line. 54285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 54295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\activeparens{% 54305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\(=\active \catcode`\)=\active 54315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\[=\active \catcode`\]=\active 54325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\&=\active 54335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 54345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 54355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Make control sequences which act like normal parenthesis chars. 54365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\lparen = ( \let\rparen = ) 54375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 54385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Be sure that we always have a definition for `(', etc. For example, 54395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% if the fn name has parens in it, \boldbrax will not be in effect yet, 54405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% so TeX would otherwise complain about undefined control sequence. 54415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{ 54425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \activeparens 54435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let(=\lparen \global\let)=\rparen 54445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let[=\lbrack \global\let]=\rbrack 54455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let& = \& 54465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 54475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} 54485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\magicamp{\let&=\amprm} 54495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 54505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 54515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\parencount 54525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 54535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If we encounter &foo, then turn on ()-hacking afterwards 54545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifampseen 54555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\amprm#1 {\ampseentrue{\bf\ }} 54565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 54575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\parenfont{% 54585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifampseen 54595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % At the first level, print parens in roman, 54605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % otherwise use the default font. 54615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum \parencount=1 \rm \fi 54625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 54635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % The \sf parens (in \boldbrax) actually are a little bolder than 54645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % the contained text. This is especially needed for [ and ] . 54655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \sf 54665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 54675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 54685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\infirstlevel#1{% 54695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifampseen 54705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\parencount=1 54715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project #1% 54725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 54735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 54745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 54755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\bfafterword#1 {#1 \bf} 54765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 54775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\opnr{% 54785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\advance\parencount by 1 54795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\parenfont(}% 54805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \infirstlevel \bfafterword 54815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 54825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\clnr{% 54835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\parenfont)}% 54845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \infirstlevel \sl 54855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\advance\parencount by -1 54865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 54875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 54885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\brackcount 54895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\lbrb{% 54905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\advance\brackcount by 1 54915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\bf[}% 54925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 54935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\rbrb{% 54945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\bf]}% 54955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\advance\brackcount by -1 54965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 54975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 54985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\checkparencounts{% 54995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\parencount=0 \else \badparencount \fi 55005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\brackcount=0 \else \badbrackcount \fi 55015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 55025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\badparencount{% 55035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errmessage{Unbalanced parentheses in @def}% 55045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\parencount=0 55055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 55065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\badbrackcount{% 55075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errmessage{Unbalanced square braces in @def}% 55085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\brackcount=0 55095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 55105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 55115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 55125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{macros,} 55135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @macro. 55145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 55155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% To do this right we need a feature of e-TeX, \scantokens, 55165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% which we arrange to emulate with a temporary file in ordinary TeX. 55175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\eTeXversion\undefined 55185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \newwrite\macscribble 55195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\scantokens#1{% 55205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \toks0={#1}% 55215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \immediate\openout\macscribble=\jobname.tmp 55225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \immediate\write\macscribble{\the\toks0}% 55235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \immediate\closeout\macscribble 55245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \input \jobname.tmp 55255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } 55265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi 55275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 55285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\scanmacro#1{% 55295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \begingroup 55305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \newlinechar`\^^M 55315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\xeatspaces\eatspaces 55325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Undo catcode changes of \startcontents and \doprintindex 55335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % When called from @insertcopying or (short)caption, we need active 55345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % backslash to get it printed correctly. Previously, we had 55355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \catcode`\\=\other instead. We'll see whether a problem appears 55365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % with macro expansion. --kasal, 19aug04 55375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ 55385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % ... and \example 55395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \spaceisspace 55405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 55415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Append \endinput to make sure that TeX does not see the ending newline. 55425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 55435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % I've verified that it is necessary both for e-TeX and for ordinary TeX 55445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % --kasal, 29nov03 55455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \scantokens{#1\endinput}% 55465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup 55475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 55485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 55495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\scanexp#1{% 55505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\temp{\noexpand\scanmacro{#1}}% 55515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \temp 55525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 55535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 55545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\paramno % Count of parameters 55555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\macname % Macro name 55565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifrecursive % Is it recursive? 55575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\macrolist{} % List of all defined macros in the form 55585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \do\macro1\do\macro2... 55595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 55605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Utility routines. 55615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This does \let #1 = #2, with \csnames; that is, 55625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \let \csname#1\endcsname = \csname#2\endcsname 55635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (except of course we have to play expansion games). 55645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 55655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\cslet#1#2{% 55665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\let 55675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \csname#1\expandafter\endcsname 55685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \csname#2\endcsname 55695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 55705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 55715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Trim leading and trailing spaces off a string. 55725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Concepts from aro-bend problem 15 (see CTAN). 55735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\catcode`\@=11 55745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} 55755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} 55765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} 55775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unbrace#1{#1} 55785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\unbrace{\gdef\trim@@@ #1 } #2@{#1} 55795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 55805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 55815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Trim a single trailing ^^M off a string. 55825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\catcode`\^^M=\other \catcode`\Q=3% 55835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\eatcr #1{\eatcra #1Q^^MQ}% 55845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\eatcra#1^^MQ{\eatcrb#1Q}% 55855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\eatcrb#1Q#2Q{#1}% 55865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 55875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 55885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Macro bodies are absorbed as an argument in a context where 55895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% all characters are catcode 10, 11 or 12, except \ which is active 55905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (as in normal texinfo). It is necessary to change the definition of \. 55915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 55925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It's necessary to have hard CRs when the macro is executed. This is 55935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% done by making ^^M (\endlinechar) catcode 12 when reading the macro 55945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% body, and then making it the \newlinechar in \scanmacro. 55955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 55965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\scanctxt{% 55975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\"=\other 55985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\+=\other 55995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\<=\other 56005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\>=\other 56015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\@=\other 56025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^=\other 56035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\_=\other 56045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\|=\other 56055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\~=\other 56065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 56075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 56085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\scanargctxt{% 56095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \scanctxt 56105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\\=\other 56115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^M=\other 56125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 56135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 56145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\macrobodyctxt{% 56155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \scanctxt 56165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\{=\other 56175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\}=\other 56185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^M=\other 56195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \usembodybackslash 56205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 56215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 56225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\macroargctxt{% 56235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \scanctxt 56245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\\=\other 56255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 56265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 56275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \mbodybackslash is the definition of \ in @macro bodies. 56285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It maps \foo\ => \csname macarg.foo\endcsname => #N 56295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% where N is the macro parameter number. 56305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We define \csname macarg.\endcsname to be \realbackslash, so 56315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \\ in macro replacement text gets you a backslash. 56325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 56335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\catcode`@=0 @catcode`@\=@active 56345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @gdef@usembodybackslash{@let\=@mbodybackslash} 56355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} 56365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 56375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\expandafter\def\csname macarg.\endcsname{\realbackslash} 56385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 56395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\macro{\recursivefalse\parsearg\macroxxx} 56405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\rmacro{\recursivetrue\parsearg\macroxxx} 56415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 56425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\macroxxx#1{% 56435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \getargs{#1}% now \macname is the macname and \argl the arglist 56445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\argl\empty % no arguments 56455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \paramno=0% 56465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 56475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\parsemargdef \argl;% 56485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 56495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \if1\csname ismacro.\the\macname\endcsname 56505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \message{Warning: redefining \the\macname}% 56515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 56525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\ifx\csname \the\macname\endcsname \relax 56535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else \errmessage{Macro name \the\macname\space already defined}\fi 56545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\cslet{macsave.\the\macname}{\the\macname}% 56555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% 56565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Add the macroname to \macrolist 56575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \toks0 = \expandafter{\macrolist\do}% 56585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \xdef\macrolist{\the\toks0 56595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\noexpand\csname\the\macname\endcsname}% 56605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 56615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \begingroup \macrobodyctxt 56625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifrecursive \expandafter\parsermacbody 56635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else \expandafter\parsemacbody 56645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi} 56655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 56665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\unmacro{% 56675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \if1\csname ismacro.#1\endcsname 56685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\cslet{#1}{macsave.#1}% 56695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\expandafter\let \csname ismacro.#1\endcsname=0% 56705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Remove the macro name from \macrolist: 56715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \begingroup 56725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\let\csname#1\endcsname \relax 56735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\do\unmacrodo 56745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \xdef\macrolist{\macrolist}% 56755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup 56765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 56775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errmessage{Macro #1 not defined}% 56785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 56795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 56805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 56815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Called by \do from \dounmacro on each macro. The idea is to omit any 56825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% macro definitions that have been changed to \relax. 56835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 56845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unmacrodo#1{% 56855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx#1\relax 56865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % remove this 56875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 56885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noexpand\do \noexpand #1% 56895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 56905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 56915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 56925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This makes use of the obscure feature that if the last token of a 56935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% <parameter list> is #, then the preceding argument is delimited by 56945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% an opening brace, and that opening brace is not consumed. 56955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\getargs#1{\getargsxxx#1{}} 56965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} 56975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\getmacname #1 #2\relax{\macname={#1}} 56985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\getmacargs#1{\def\argl{#1}} 56995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 57005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Parse the optional {params} list. Set up \paramno and \paramlist 57015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% so \defmacro knows what to do. Define \macarg.blah for each blah 57025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% in the params list, to be ##N where N is the position in that list. 57035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% That gets used by \mbodybackslash (above). 57045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 57055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We need to get `macro parameter char #' into several definitions. 57065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The technique used is stolen from LaTeX: let \hash be something 57075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% unexpandable, insert that wherever you need a #, and then redefine 57085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% it to # just before using the token list produced. 57095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 57105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The same technique is used to protect \eatspaces till just before 57115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the macro is used. 57125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 57135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\parsemargdef#1;{\paramno=0\def\paramlist{}% 57145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} 57155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\parsemargdefxxx#1,{% 57165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \if#1;\let\next=\relax 57175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else \let\next=\parsemargdefxxx 57185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\paramno by 1% 57195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname 57205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\xeatspaces{\hash\the\paramno}}% 57215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\paramlist{\paramlist\hash\the\paramno,}% 57225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi\next} 57235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 57245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% These two commands read recursive and nonrecursive macro bodies. 57255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (They're different since rec and nonrec macros end differently.) 57265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 57275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\long\def\parsemacbody#1@end macro% 57285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% 57295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\long\def\parsermacbody#1@end rmacro% 57305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% 57315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 57325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This defines the macro itself. There are six cases: recursive and 57335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% nonrecursive macros of zero, one, and many arguments. 57345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Much magic with \expandafter here. 57355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \xdef is used so that macro definitions will survive the file 57365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% they're defined in; @include reads the file inside a group. 57375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\defmacro{% 57385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\hash=##% convert placeholders to macro parameter chars 57395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifrecursive 57405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifcase\paramno 57415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 0 57425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\xdef\csname\the\macname\endcsname{% 57435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noexpand\scanmacro{\temp}}% 57445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \or % 1 57455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\xdef\csname\the\macname\endcsname{% 57465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \bgroup\noexpand\macroargctxt 57475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noexpand\braceorline 57485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\noexpand\csname\the\macname xxx\endcsname}% 57495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\xdef\csname\the\macname xxx\endcsname##1{% 57505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \egroup\noexpand\scanmacro{\temp}}% 57515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else % many 57525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\xdef\csname\the\macname\endcsname{% 57535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \bgroup\noexpand\macroargctxt 57545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noexpand\csname\the\macname xx\endcsname}% 57555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\xdef\csname\the\macname xx\endcsname##1{% 57565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% 57575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\expandafter 57585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\xdef 57595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\expandafter 57605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \csname\the\macname xxx\endcsname 57615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \paramlist{\egroup\noexpand\scanmacro{\temp}}% 57625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 57635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 57645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifcase\paramno 57655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 0 57665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\xdef\csname\the\macname\endcsname{% 57675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noexpand\norecurse{\the\macname}% 57685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noexpand\scanmacro{\temp}\egroup}% 57695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \or % 1 57705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\xdef\csname\the\macname\endcsname{% 57715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \bgroup\noexpand\macroargctxt 57725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noexpand\braceorline 57735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\noexpand\csname\the\macname xxx\endcsname}% 57745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\xdef\csname\the\macname xxx\endcsname##1{% 57755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \egroup 57765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noexpand\norecurse{\the\macname}% 57775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noexpand\scanmacro{\temp}\egroup}% 57785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else % many 57795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\xdef\csname\the\macname\endcsname{% 57805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \bgroup\noexpand\macroargctxt 57815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\noexpand\csname\the\macname xx\endcsname}% 57825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\xdef\csname\the\macname xx\endcsname##1{% 57835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% 57845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\expandafter 57855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\xdef 57865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\expandafter 57875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \csname\the\macname xxx\endcsname 57885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \paramlist{% 57895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \egroup 57905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noexpand\norecurse{\the\macname}% 57915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \noexpand\scanmacro{\temp}\egroup}% 57925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 57935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi} 57945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 57955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} 57965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 57975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \braceorline decides whether the next nonwhitespace character is a 57985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% {. If so it reads up to the closing }, if not, it reads the whole 57995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% line. Whatever was read is then fed to the next control sequence 58005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% as an argument (by \parsebrace or \parsearg) 58015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} 58025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\braceorlinexxx{% 58035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\nchar\bgroup\else 58045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\parsearg 58055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi \next} 58065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 58075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We want to disable all macros during \shipout so that they are not 58085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% expanded by \write. 58095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}% 58105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\next{\macrolist}\expandafter\endgroup\next} 58115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 58125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For \indexnofonts, we need to get rid of all macros, leaving only the 58135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% arguments (if present). Of course this is not nearly correct, but it 58145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% is the best we can do for now. makeinfo does not expand macros in the 58155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% argument to @deffn, which ends up writing an index entry, and texindex 58165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% isn't prepared for an index sort entry that starts with \. 58175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 58185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Since macro invocations are followed by braces, we can just redefine them 58195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to take a single TeX argument. The case of a macro invocation that 58205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% goes to end-of-line is not handled. 58215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 58225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\emptyusermacros{\begingroup 58235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\do##1{\let\noexpand##1=\noexpand\asis}% 58245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\next{\macrolist}\expandafter\endgroup\next} 58255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 58265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 58275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @alias. 58285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We need some trickery to remove the optional spaces around the equal 58295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% sign. Just make them active and then expand them all to nothing. 58305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\alias{\parseargusing\obeyspaces\aliasxxx} 58315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\aliasxxx #1{\aliasyyy#1\relax} 58325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\aliasyyy #1=#2\relax{% 58335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 58345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\let\obeyedspace=\empty 58355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% 58365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 58375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \next 58385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 58395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 58405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 58415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{cross references,} 58425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 58435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newwrite\auxfile 58445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 58455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifhavexrefs % True if xref values are known. 58465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifwarnedxrefs % True if we warned once that they aren't known. 58475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 58485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @inforef is relatively simple. 58495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\inforef #1{\inforefzzz #1,,,,**} 58505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, 58515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project node \samp{\ignorespaces#1{}}} 58525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 58535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @node's only job in TeX is to define \lastnode, which is used in 58545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% cross-references. The @node line might or might not have commas, and 58555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% might or might not have spaces before the first comma, like: 58565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @node foo , bar , ... 58575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We don't want such trailing spaces in the node name. 58585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 58595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} 58605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 58615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% also remove a trailing comma, in case of something like this: 58625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @node Help-Cross, , , Cross-refs 58635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} 58645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} 58655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 58665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\nwnode=\node 58675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\lastnode=\empty 58685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 58695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Write a cross-reference definition for the current node. #1 is the 58705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% type (Ynumbered, Yappendix, Ynothing). 58715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 58725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\donoderef#1{% 58735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\lastnode\empty\else 58745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setref{\lastnode}{#1}% 58755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let\lastnode=\empty 58765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 58775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 58785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 58795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @anchor{NAME} -- define xref target at arbitrary point. 58805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 58815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\savesfregister 58825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 58835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} 58845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} 58855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} 58865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 58875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an 58885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% anchor), which consists of three parts: 58895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 1) NAME-title - the current sectioning name taken from \thissection, 58905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% or the anchor name. 58915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 2) NAME-snt - section number and type, passed as the SNT arg, or 58925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% empty for anchors. 58935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 3) NAME-pg - the page number. 58945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 58955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This is called from \donoderef, \anchor, and \dofloat. In the case of 58965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% floats, there is an additional part, which is not written here: 58975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 4) NAME-lof - the text as it should appear in a @listoffloats. 58985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 58995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setref#1#2{% 59005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pdfmkdest{#1}% 59015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \iflinks 59025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 59035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \atdummies % preserve commands, but don't expand them 59045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \turnoffactive 59055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \otherbackslash 59065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\writexrdef##1##2{% 59075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef 59085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ##1}{##2}}% these are parameters of \writexrdef 59095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 59105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \toks0 = \expandafter{\thissection}% 59115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \immediate \writexrdef{title}{\the\toks0 }% 59125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. 59135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \writexrdef{pg}{\folio}% will be written later, during \shipout 59145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 59155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 59165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 59175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 59185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is 59195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the node name, #2 the name of the Info cross-reference, #3 the printed 59205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% node name, #4 the name of the Info file, #5 the name of the printed 59215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% manual. All but the node name can be omitted. 59225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 59235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} 59245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} 59255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ref#1{\xrefX[#1,,,,,,,]} 59265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup 59275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \unsepspaces 59285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\printedmanual{\ignorespaces #5}% 59295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\printedrefname{\ignorespaces #3}% 59305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox1=\hbox{\printedmanual\unskip}% 59315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0=\hbox{\printedrefname\unskip}% 59325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifdim \wd0 = 0pt 59335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % No printed node name was explicitly given. 59345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax 59355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Use the node name inside the square brackets. 59365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\printedrefname{\ignorespaces #1}% 59375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 59385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Use the actual chapter/section title appear inside 59395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % the square brackets. Use the real section title if we have it. 59405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifdim \wd1 > 0pt 59415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % It is in another manual, so we don't have it. 59425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\printedrefname{\ignorespaces #1}% 59435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 59445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifhavexrefs 59455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We know the real title if we have the xref values. 59465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\printedrefname{\refx{#1-title}{}}% 59475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 59485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Otherwise just copy the Info node name. 59495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\printedrefname{\ignorespaces #1}% 59505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi% 59515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 59525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 59535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 59545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 59555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Make link in pdf output. 59565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifpdf 59575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \leavevmode 59585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \getfilename{#4}% 59595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\turnoffactive \otherbackslash 59605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\filenamelength>0 59615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \startlink attr{/Border [0 0 0]}% 59625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project goto file{\the\filename.pdf} name{#1}% 59635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 59645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \startlink attr{/Border [0 0 0]}% 59655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project goto name{\pdfmkpgn{#1}}% 59665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 59675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 59685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \linkcolor 59695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 59705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 59715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Float references are printed completely differently: "Figure 1.2" 59725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % instead of "[somenode], p.3". We distinguish them by the 59735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % LABEL-title being set to a magic string. 59745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 59755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Have to otherify everything special to allow the \csname to 59765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % include an _ in the xref name, etc. 59775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \indexnofonts 59785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \turnoffactive 59795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \otherbackslash 59805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\global\expandafter\let\expandafter\Xthisreftitle 59815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \csname XR#1-title\endcsname 59825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 59835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \iffloat\Xthisreftitle 59845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If the user specified the print name (third arg) to the ref, 59855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % print it instead of our usual "Figure 1.2". 59865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifdim\wd0 = 0pt 59875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \refx{#1-snt}% 59885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 59895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \printedrefname 59905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 59915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 59925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % if the user also gave the printed manual name (fifth arg), append 59935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % "in MANUALNAME". 59945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifdim \wd1 > 0pt 59955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \space \putwordin{} \cite{\printedmanual}% 59965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 59975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 59985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % node/anchor (non-float) references. 59995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 60005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not 60015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % insert empty discretionaries after hyphens, which means that it will 60025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % not find a line break at a hyphen in a node names. Since some manuals 60035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % are best written with fairly long node names, containing hyphens, this 60045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % is a loss. Therefore, we give the text of the node name again, so it 60055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % is as if TeX is seeing it for the first time. 60065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifdim \wd1 > 0pt 60075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% 60085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 60095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % _ (for example) has to be the character _ for the purposes of the 60105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % control sequence corresponding to the node, but it has to expand 60115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % into the usual \leavevmode...\vrule stuff for purposes of 60125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % printing. So we \turnoffactive for the \refx-snt, back on for the 60135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % printing, back off for the \refx-pg. 60145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\turnoffactive \otherbackslash 60155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Only output a following space if the -snt ref is nonempty; for 60165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % @unnumbered and @anchor, it won't be. 60175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% 60185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi 60195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 60205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % output the `[mynode]' via a macro so it can be overridden. 60215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \xrefprintnodename\printedrefname 60225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 60235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % But we always want a comma and a space: 60245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project ,\space 60255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 60265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % output the `page 3'. 60275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}% 60285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 60295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 60305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endlink 60315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup} 60325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 60335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This macro is called from \xrefX for the `[nodename]' part of xref 60345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% output. It's a separate macro only so it can be changed more easily, 60355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% since square brackets don't work well in some documents. Particularly 60365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% one that Bob is working on :). 60375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 60385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\xrefprintnodename#1{[#1]} 60395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 60405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Things referred to by \setref. 60415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 60425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Ynothing{} 60435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Yomitfromtoc{} 60445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Ynumbered{% 60455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\secno=0 60465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \putwordChapter@tie \the\chapno 60475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else \ifnum\subsecno=0 60485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \putwordSection@tie \the\chapno.\the\secno 60495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else \ifnum\subsubsecno=0 60505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \putwordSection@tie \the\chapno.\the\secno.\the\subsecno 60515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 60525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno 60535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi\fi\fi 60545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 60555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Yappendix{% 60565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum\secno=0 60575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \putwordAppendix@tie @char\the\appendixno{}% 60585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else \ifnum\subsecno=0 60595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \putwordSection@tie @char\the\appendixno.\the\secno 60605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else \ifnum\subsubsecno=0 60615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno 60625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 60635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \putwordSection@tie 60645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno 60655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi\fi\fi 60665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 60675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 60685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. 60695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If its value is nonempty, SUFFIX is output afterward. 60705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 60715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\refx#1#2{% 60725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 60735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \indexnofonts 60745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \otherbackslash 60755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\global\expandafter\let\expandafter\thisrefX 60765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \csname XR#1\endcsname 60775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 60785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\thisrefX\relax 60795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If not defined, say something at least. 60805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \angleleft un\-de\-fined\angleright 60815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \iflinks 60825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifhavexrefs 60835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \message{\linenumber Undefined cross reference `#1'.}% 60845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 60855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifwarnedxrefs\else 60865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\warnedxrefstrue 60875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \message{Cross reference values unknown; you must run TeX again.}% 60885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 60895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 60905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 60915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 60925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % It's defined, so just use it. 60935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \thisrefX 60945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 60955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project #2% Output the suffix in any case. 60965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 60975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 60985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This is the macro invoked by entries in the aux file. Usually it's 60995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% just a \def (we prepend XR to the control sequence name to avoid 61005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% collisions). But if this is a float type, we have more work to do. 61015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 61025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\xrdef#1#2{% 61035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value. 61045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 61055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Was that xref control sequence that we just defined for a float? 61065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\iffloat\csname XR#1\endcsname 61075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % it was a float, and we have the (safe) float type in \iffloattype. 61085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\let\expandafter\floatlist 61095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \csname floatlist\iffloattype\endcsname 61105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 61115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Is this the first time we've seen this float type? 61125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\ifx\floatlist\relax 61135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \toks0 = {\do}% yes, so just \do 61145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 61155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % had it before, so preserve previous elements in list. 61165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \toks0 = \expandafter{\floatlist\do}% 61175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 61185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 61195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Remember this xref in the control sequence \floatlistFLOATTYPE, 61205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % for later use in \listoffloats. 61215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}% 61225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 61235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 61245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 61255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Read the last existing aux file, if any. No error if none exists. 61265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 61275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\tryauxfile{% 61285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \openin 1 \jobname.aux 61295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifeof 1 \else 61305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \readauxfile 61315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\havexrefstrue 61325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 61335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \closein 1 61345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 61355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 61365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\readauxfile{\begingroup 61375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^@=\other 61385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^A=\other 61395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^B=\other 61405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^C=\other 61415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^D=\other 61425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^E=\other 61435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^F=\other 61445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^G=\other 61455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^H=\other 61465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^K=\other 61475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^L=\other 61485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^N=\other 61495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^P=\other 61505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^Q=\other 61515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^R=\other 61525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^S=\other 61535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^T=\other 61545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^U=\other 61555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^V=\other 61565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^W=\other 61575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^X=\other 61585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^Z=\other 61595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^[=\other 61605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^\=\other 61615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^]=\other 61625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^^=\other 61635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^_=\other 61645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. 61655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % in xref tags, i.e., node names. But since ^^e4 notation isn't 61665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % supported in the main text, it doesn't seem desirable. Furthermore, 61675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % that is not enough: for node names that actually contain a ^ 61685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % character, we would end up writing a line like this: 'xrdef {'hat 61695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first 61705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % argument, and \hat is not an expandable control sequence. It could 61715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % all be worked out, but why? Either we support ^^ or we don't. 61725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 61735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % The other change necessary for this was to define \auxhat: 61745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter 61755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % and then to call \auxhat in \setq. 61765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 61775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^=\other 61785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 61795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Special characters. Should be turned off anyway, but... 61805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\~=\other 61815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\[=\other 61825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\]=\other 61835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\"=\other 61845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\_=\other 61855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\|=\other 61865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\<=\other 61875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\>=\other 61885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\$=\other 61895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\#=\other 61905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\&=\other 61915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\%=\other 61925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`+=\other % avoid \+ for paranoia even though we've turned it off 61935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 61945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % This is to support \ in node names and titles, since the \ 61955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % characters end up in a \csname. It's easier than 61965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % leaving it active and making its active definition an actual \ 61975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % character. What I don't understand is why it works in the *value* 61985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % of the xrdef. Seems like it should be a catcode12 \, and that 61995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % should not typeset properly. But it works, so I'm moving on for 62005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % now. --karl, 15jan04. 62015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\\=\other 62025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 62035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Make the characters 128-255 be printing characters. 62045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 62055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \count 1=128 62065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\loop{% 62075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode\count 1=\other 62085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\count 1 by 1 62095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifnum \count 1<256 \loop \fi 62105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 62115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 62125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 62135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % @ is our escape character in .aux files, and we need braces. 62145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\{=1 62155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\}=2 62165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\@=0 62175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 62185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \input \jobname.aux 62195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup} 62205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 62215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 62225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{insertions,} 62235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% including footnotes. 62245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 62255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount \footnoteno 62265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 62275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The trailing space in the following definition for supereject is 62285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% vital for proper filling; pages come out unaligned when you do a 62295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% pagealignmacro call if that space before the closing brace is 62305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% removed. (Generally, numeric constants should always be followed by a 62315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% space to prevent strange expansion errors.) 62325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\supereject{\par\penalty -20000\footnoteno =0 } 62335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 62345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @footnotestyle is meaningful for info output only. 62355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\footnotestyle=\comment 62365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 62375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\catcode `\@=11 62385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 62395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Auto-number footnotes. Otherwise like plain. 62405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\footnote{% 62415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\indent=\ptexindent 62425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\noindent=\ptexnoindent 62435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\advance\footnoteno by \@ne 62445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\thisfootno{$^{\the\footnoteno}$}% 62455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 62465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % In case the footnote comes at the end of a sentence, preserve the 62475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % extra spacing after we do the footnote number. 62485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\@sf\empty 62495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi 62505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 62515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Remove inadvertent blank space before typesetting the footnote number. 62525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \unskip 62535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \thisfootno\@sf 62545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dofootnote 62555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}% 62565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 62575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Don't bother with the trickery in plain.tex to not require the 62585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% footnote text as a parameter. Our footnotes don't need to be so general. 62595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 62605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Oh yes, they do; otherwise, @ifset (and anything else that uses 62615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \parseargline) fails inside footnotes because the tokens are fixed when 62625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the footnote is read. --karl, 16nov96. 62635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 62645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\dofootnote{% 62655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \insert\footins\bgroup 62665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We want to typeset this text as a normal paragraph, even if the 62675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % footnote reference occurs in (for example) a display environment. 62685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % So reset some parameters. 62695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hsize=\pagewidth 62705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \interlinepenalty\interfootnotelinepenalty 62715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \splittopskip\ht\strutbox % top baseline for broken footnotes 62725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \splitmaxdepth\dp\strutbox 62735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \floatingpenalty\@MM 62745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \leftskip\z@skip 62755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \rightskip\z@skip 62765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \spaceskip\z@skip 62775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \xspaceskip\z@skip 62785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parindent\defaultparindent 62795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 62805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \smallfonts \rm 62815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 62825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Because we use hanging indentation in footnotes, a @noindent appears 62835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % to exdent this text, so make it be a no-op. makeinfo does not use 62845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % hanging indentation so @noindent can still be needed within footnote 62855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % text after an @example or the like (not that this is good style). 62865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\noindent = \relax 62875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 62885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Hang the footnote text off the number. Use \everypar in case the 62895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % footnote extends for more than one paragraph. 62905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \everypar = {\hang}% 62915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \textindent{\thisfootno}% 62925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 62935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Don't crash into the line above the footnote text. Since this 62945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % expands into a box, it must come within the paragraph, lest it 62955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % provide a place where TeX can split the footnote. 62965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \footstrut 62975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \futurelet\next\fo@t 62985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 62995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}%end \catcode `\@=11 63005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 63015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% In case a @footnote appears in a vbox, save the footnote text and create 63025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the real \insert just after the vbox finished. Otherwise, the insertion 63035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% would be lost. 63045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Similarily, if a @footnote appears inside an alignment, save the footnote 63055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% text to a box and make the \insert when a row of the table is finished. 63065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% And the same can be done for other insert classes. --kasal, 16nov03. 63075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 63085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Replace the \insert primitive by a cheating macro. 63095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Deeper inside, just make sure that the saved insertions are not spilled 63105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% out prematurely. 63115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 63125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\startsavinginserts{% 63135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx \insert\ptexinsert 63145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\insert\saveinsert 63155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 63165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\checkinserts\relax 63175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 63185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 63195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 63205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This \insert replacement works for both \insert\footins{foo} and 63215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. 63225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 63235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\saveinsert#1{% 63245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\next{\noexpand\savetobox \makeSAVEname#1}% 63255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \afterassignment\next 63265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % swallow the left brace 63275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\temp = 63285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 63295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} 63305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} 63315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 63325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} 63335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 63345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\placesaveins#1{% 63355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname 63365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\box#1}% 63375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 63385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 63395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% eat @SAVE -- beware, all of them have catcode \other: 63405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{ 63415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) 63425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\gobblesave @SAVE{} 63435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 63445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 63455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% initialization: 63465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\newsaveins #1{% 63475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% 63485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \next 63495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 63505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\newsaveinsX #1{% 63515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \csname newbox\endcsname #1% 63525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts 63535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \checksaveins #1}% 63545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 63555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 63565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% initialize: 63575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\checkinserts\empty 63585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newsaveins\footins 63595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newsaveins\margin 63605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 63615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 63625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @image. We use the macros from epsf.tex to support this. 63635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If epsf.tex is not installed and @image is used, we complain. 63645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 63655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Check for and read epsf.tex up front. If we read it only at @image 63665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% time, we might be inside a group, and then its definitions would get 63675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% undone and the next image would fail. 63685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\openin 1 = epsf.tex 63695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifeof 1 \else 63705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Do not bother showing banner with epsf.tex v2.7k (available in 63715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % doc/epsf.tex and on ctan). 63725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\epsfannounce{\toks0 = }% 63735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \input epsf.tex 63745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi 63755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\closein 1 63765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 63775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We will only complain once about lack of epsf.tex. 63785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifwarnednoepsf 63795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newhelp\noepsfhelp{epsf.tex must be installed for images to 63805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project work. It is also included in the Texinfo distribution, or you can get 63815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project it from ftp://tug.org/tex/epsf.tex.} 63825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 63835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\image#1{% 63845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\epsfbox\undefined 63855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifwarnednoepsf \else 63865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errhelp = \noepsfhelp 63875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errmessage{epsf.tex not found, images will be ignored}% 63885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\warnednoepsftrue 63895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 63905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 63915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \imagexxx #1,,,,,\finish 63925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 63935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 63945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 63955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Arguments to @image: 63965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is (mandatory) image filename; we tack on .eps extension. 63975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #2 is (optional) width, #3 is (optional) height. 63985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #4 is (ignored optional) html alt text. 63995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #5 is (ignored optional) extension. 64005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #6 is just the usual extra ignored arg for parsing this stuff. 64015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifimagevmode 64025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup 64035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \catcode`\^^M = 5 % in case we're inside an example 64045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \normalturnoffactive % allow _ et al. in names 64055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If the image is by itself, center it. 64065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifvmode 64075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \imagevmodetrue 64085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nobreak\bigskip 64095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Usually we'll have text after the image which will insert 64105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \parskip glue, so insert it here too to equalize the space 64115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % above and below. 64125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nobreak\vskip\parskip 64135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \nobreak 64145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \line\bgroup\hss 64155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 64165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 64175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Output the image. 64185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifpdf 64195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dopdfimage{#1}{#2}{#3}% 64205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 64215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \epsfbox itself resets \epsf?size at each figure. 64225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi 64235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi 64245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \epsfbox{#1.eps}% 64255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 64265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 64275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifimagevmode \hss \egroup \bigbreak \fi % space after the image 64285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup} 64295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 64305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 64315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, 64325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% etc. We don't actually implement floating yet, we always include the 64335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% float "here". But it seemed the best name for the future. 64345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 64355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} 64365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 64375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% There may be a space before second and/or third parameter; delete it. 64385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\eatcommaspace#1, {#1,} 64395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 64405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is the optional FLOATTYPE, the text label for this float, typically 64415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% "Figure", "Table", "Example", etc. Can't contain commas. If omitted, 64425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% this float will not be numbered and cannot be referred to. 64435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 64445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #2 is the optional xref label. Also must be present for the float to 64455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% be referable. 64465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 64475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #3 is the optional positioning argument; for now, it is ignored. It 64485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% will somehow specify the positions allowed to float to (here, top, bottom). 64495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 64505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We keep a separate counter for each FLOATTYPE, which we reset at each 64515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% chapter-level command. 64525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\resetallfloatnos=\empty 64535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 64545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dofloat#1,#2,#3,#4\finish{% 64555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\thiscaption=\empty 64565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\thisshortcaption=\empty 64575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 64585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % don't lose footnotes inside @float. 64595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 64605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % BEWARE: when the floats start float, we have to issue warning whenever an 64615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % insert appears inside a float which could possibly float. --kasal, 26may04 64625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 64635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \startsavinginserts 64645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 64655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We can't be used inside a paragraph. 64665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \par 64675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 64685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vtop\bgroup 64695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\floattype{#1}% 64705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\floatlabel{#2}% 64715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\floatloc{#3}% we do nothing with this yet. 64725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 64735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\floattype\empty 64745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\safefloattype=\empty 64755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 64765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 64775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % the floattype might have accents or other special characters, 64785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % but we need to use it in a control sequence name. 64795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \indexnofonts 64805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \turnoffactive 64815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \xdef\safefloattype{\floattype}% 64825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 64835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 64845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 64855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If label is given but no type, we handle that as the empty type. 64865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\floatlabel\empty \else 64875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % We want each FLOATTYPE to be numbered separately (Figure 1, 64885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Table 1, Figure 2, ...). (And if no label, no number.) 64895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 64905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\getfloatno\csname\safefloattype floatno\endcsname 64915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\advance\floatno by 1 64925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 64935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 64945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % This magic value for \thissection is output by \setref as the 64955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % XREFLABEL-title value. \xrefX uses it to distinguish float 64965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % labels (which have a completely different output format) from 64975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % node and anchor labels. And \xrdef uses it to construct the 64985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % lists of floats. 64995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 65005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\thissection{\floatmagic=\safefloattype}% 65015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setref{\floatlabel}{Yfloat}% 65025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 65035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 65045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 65055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % start with \parskip glue, I guess. 65065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip\parskip 65075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 65085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Don't suppress indentation if a float happens to start a section. 65095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \restorefirstparagraphindent 65105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 65115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 65125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% we have these possibilities: 65135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap 65145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @float Foo,lbl & no caption: Foo 1.1 65155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @float Foo & @caption{Cap}: Foo: Cap 65165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @float Foo & no caption: Foo 65175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @float ,lbl & Caption{Cap}: 1.1: Cap 65185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @float ,lbl & no caption: 1.1 65195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @float & @caption{Cap}: Cap 65205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @float & no caption: 65215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 65225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Efloat{% 65235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\floatident = \empty 65245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 65255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % In all cases, if we have a float type, it comes first. 65265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\floattype\empty \else \def\floatident{\floattype}\fi 65275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 65285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If we have an xref label, the number comes next. 65295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\floatlabel\empty \else 65305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\floattype\empty \else % if also had float type, need tie first. 65315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \appendtomacro\floatident{\tie}% 65325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 65335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % the number. 65345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \appendtomacro\floatident{\chaplevelprefix\the\floatno}% 65355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 65365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 65375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Start the printed caption with what we've constructed in 65385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \floatident, but keep it separate; we need \floatident again. 65395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\captionline = \floatident 65405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 65415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\thiscaption\empty \else 65425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\floatident\empty \else 65435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \appendtomacro\captionline{: }% had ident, so need a colon between 65445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 65455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 65465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % caption text. 65475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \appendtomacro\captionline{\scanexp\thiscaption}% 65485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 65495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 65505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If we have anything to print, print it, with space before. 65515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Eventually this needs to become an \insert. 65525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\captionline\empty \else 65535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip.5\parskip 65545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \captionline 65555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 65565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Space below caption. 65575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vskip\parskip 65585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 65595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 65605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If have an xref label, write the list of floats info. Do this 65615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % after the caption, to avoid chance of it being a breakpoint. 65625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\floatlabel\empty \else 65635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Write the text that goes in the lof to the aux file as 65645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \floatlabel-lof. Besides \floatident, we include the short 65655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % caption if specified, else the full caption if specified, else nothing. 65665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 65675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \atdummies \turnoffactive \otherbackslash 65685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % since we read the caption text in the macro world, where ^^M 65695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % is turned into a normal character, we have to scan it back, so 65705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % we don't write the literal three characters "^^M" into the aux file. 65715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \scanexp{% 65725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \xdef\noexpand\gtemp{% 65735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\thisshortcaption\empty 65745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \thiscaption 65755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 65765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \thisshortcaption 65775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 65785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 65795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 65805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident 65815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\gtemp\empty \else : \gtemp \fi}}% 65825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 65835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 65845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \egroup % end of \vtop 65855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 65865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % place the captured inserts 65875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 65885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % BEWARE: when the floats start float, we have to issue warning whenever an 65895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % insert appears inside a float which could possibly float. --kasal, 26may04 65905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 65915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \checkinserts 65925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 65935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 65945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Append the tokens #2 to the definition of macro #1, not expanding either. 65955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 65965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\appendtomacro#1#2{% 65975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\def\expandafter#1\expandafter{#1#2}% 65985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 65995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 66005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @caption, @shortcaption 66015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 66025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\caption{\docaption\thiscaption} 66035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\shortcaption{\docaption\thisshortcaption} 66045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} 66055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\defcaption#1#2{\egroup \def#1{#2}} 66065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 66075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The parameter is the control sequence identifying the counter we are 66085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% going to use. Create it if it doesn't exist and assign it to \floatno. 66095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\getfloatno#1{% 66105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx#1\relax 66115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Haven't seen this figure type before. 66125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \csname newcount\endcsname #1% 66135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 66145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Remember to reset this floatno at the next chap. 66155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\gdef\expandafter\resetallfloatnos 66165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter{\resetallfloatnos #1=0 }% 66175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 66185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\floatno#1% 66195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 66205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 66215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \setref calls this to get the XREFLABEL-snt value. We want an @xref 66225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we 66235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% first read the @float command. 66245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 66255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% 66265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 66275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Magic string used for the XREFLABEL-title value, so \xrefX can 66285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% distinguish floats from other xref types. 66295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\floatmagic{!!float!!} 66305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 66315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is the control sequence we are passed; we expand into a conditional 66325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% which is true if #1 represents a float ref. That is, the magic 66335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \thissection value which we \setref above. 66345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 66355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\iffloat#1{\expandafter\doiffloat#1==\finish} 66365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 66375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is (maybe) the \floatmagic string. If so, #2 will be the 66385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (safe) float type for this float. We set \iffloattype to #2. 66395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 66405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doiffloat#1=#2=#3\finish{% 66415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\temp{#1}% 66425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\iffloattype{#2}% 66435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\temp\floatmagic 66445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 66455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 66465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @listoffloats FLOATTYPE - print a list of floats like a table of contents. 66475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 66485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\listoffloats{% 66495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\floattype{#1}% floattype 66505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {% 66515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % the floattype might have accents or other special characters, 66525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % but we need to use it in a control sequence name. 66535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \indexnofonts 66545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \turnoffactive 66555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \xdef\safefloattype{\floattype}% 66565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project }% 66575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 66585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. 66595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax 66605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifhavexrefs 66615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % if the user said @listoffloats foo but never @float foo. 66625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \message{\linenumber No `\safefloattype' floats to list.}% 66635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 66645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 66655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \begingroup 66665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \leftskip=\tocindent % indent these entries like a toc 66675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\do=\listoffloatsdo 66685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \csname floatlist\safefloattype\endcsname 66695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup 66705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 66715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 66725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 66735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This is called on each entry in a list of floats. We're passed the 66745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% xref label, in the form LABEL-title, which is how we save it in the 66755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% aux file. We strip off the -title and look up \XRLABEL-lof, which 66765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% has the text we're supposed to typeset here. 66775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 66785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Figures without xref labels will not be included in the list (since 66795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% they won't appear in the aux file). 66805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 66815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} 66825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\listoffloatsdoentry#1-title\finish{{% 66835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Can't fully expand XR#1-lof because it can contain anything. Just 66845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % pass the control sequence. On the other hand, XR#1-pg is just the 66855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % page number, and we want to fully expand that so we can get a link 66865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % in pdf output. 66875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \toksA = \expandafter{\csname XR#1-lof\endcsname}% 66885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 66895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % use the same \entry macro we use to generate the TOC and index. 66905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% 66915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \writeentry 66925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}} 66935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 66945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{localization,} 66955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and i18n. 66965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 66975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @documentlanguage is usually given very early, just after 66985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @setfilename. If done too late, it may not override everything 66995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% properly. Single argument is the language abbreviation. 67005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It would be nice if we could set up a hyphenation file here. 67015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 67025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\documentlanguage{% 67035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tex % read txi-??.tex file in plain TeX. 67045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Read the file if it exists. 67055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \openin 1 txi-#1.tex 67065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifeof 1 67075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errhelp = \nolanghelp 67085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \errmessage{Cannot read language file txi-#1.tex}% 67095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 67105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \input txi-#1.tex 67115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 67125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \closein 1 67135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \endgroup 67145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 67155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newhelp\nolanghelp{The given language definition file cannot be found or 67165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectis empty. Maybe you need to install it? In the current directory 67175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectshould work if nowhere else does.} 67185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 67195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 67205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @documentencoding should change something in TeX eventually, most 67215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% likely, but for now just recognize it. 67225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\documentencoding = \comment 67235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 67245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 67255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Page size parameters. 67265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 67275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\defaultparindent \defaultparindent = 15pt 67285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 67295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chapheadingskip = 15pt plus 4pt minus 2pt 67305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\secheadingskip = 12pt plus 3pt minus 2pt 67315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\subsecheadingskip = 9pt plus 2pt minus 2pt 67325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 67335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Prevent underfull vbox error messages. 67345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\vbadness = 10000 67355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 67365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Don't be so finicky about underfull hboxes, either. 67375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\hbadness = 2000 67385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 67395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Following George Bush, just get rid of widows and orphans. 67405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\widowpenalty=10000 67415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\clubpenalty=10000 67425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 67435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Use TeX 3.0's \emergencystretch to help line breaking, but if we're 67445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% using an old version of TeX, don't do anything. We want the amount of 67455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% stretch added to depend on the line length, hence the dependence on 67465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \hsize. We call this whenever the paper size is set. 67475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 67485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setemergencystretch{% 67495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifx\emergencystretch\thisisundefined 67505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Allow us to assign to \emergencystretch anyway. 67515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \def\emergencystretch{\dimen0}% 67525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \else 67535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \emergencystretch = .15\hsize 67545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 67555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 67565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 67575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Parameters in order: 1) textheight; 2) textwidth; 3) voffset; 67585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8) 67595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% physical page width. 67605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 67615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We also call \setleading{\textleading}, so the caller should define 67625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \textleading. The caller should also set \parskip. 67635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 67645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\internalpagesizes#1#2#3#4#5#6#7#8{% 67655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \voffset = #3\relax 67665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \topskip = #6\relax 67675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \splittopskip = \topskip 67685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 67695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \vsize = #1\relax 67705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\vsize by \topskip 67715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \outervsize = \vsize 67725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\outervsize by 2\topandbottommargin 67735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pageheight = \vsize 67745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 67755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hsize = #2\relax 67765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \outerhsize = \hsize 67775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\outerhsize by 0.5in 67785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pagewidth = \hsize 67795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 67805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \normaloffset = #4\relax 67815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \bindingoffset = #5\relax 67825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 67835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \ifpdf 67845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pdfpageheight #7\relax 67855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \pdfpagewidth #8\relax 67865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \fi 67875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 67885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setleading{\textleading} 67895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 67905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parindent = \defaultparindent 67915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setemergencystretch 67925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 67935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 67945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @letterpaper (the default). 67955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\letterpaper{{\globaldefs = 1 67965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parskip = 3pt plus 2pt minus 1pt 67975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \textleading = 13.2pt 67985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 67995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % If page is nothing but text, make it come out even. 68005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \internalpagesizes{46\baselineskip}{6in}% 68015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\voffset}{.25in}% 68025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\bindingoffset}{36pt}% 68035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {11in}{8.5in}% 68045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}} 68055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 68065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Use @smallbook to reset parameters for 7x9.5 (or so) format. 68075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smallbook{{\globaldefs = 1 68085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parskip = 2pt plus 1pt 68095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \textleading = 12pt 68105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 68115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \internalpagesizes{7.5in}{5in}% 68125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\voffset}{.25in}% 68135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\bindingoffset}{16pt}% 68145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {9.25in}{7in}% 68155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 68165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \lispnarrowing = 0.3in 68175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tolerance = 700 68185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hfuzz = 1pt 68195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \contentsrightmargin = 0pt 68205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \defbodyindent = .5cm 68215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}} 68225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 68235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Use @afourpaper to print on European A4 paper. 68245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\afourpaper{{\globaldefs = 1 68255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parskip = 3pt plus 2pt minus 1pt 68265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \textleading = 13.2pt 68275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 68285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Double-side printing via postscript on Laserjet 4050 68295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. 68305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % To change the settings for a different printer or situation, adjust 68315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \normaloffset until the front-side and back-side texts align. Then 68325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % do the same for \bindingoffset. You can set these for testing in 68335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % your texinfo source file like this: 68345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % @tex 68355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \global\normaloffset = -6mm 68365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % \global\bindingoffset = 10mm 68375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % @end tex 68385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \internalpagesizes{51\baselineskip}{160mm} 68395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\voffset}{\hoffset}% 68405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\bindingoffset}{44pt}% 68415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {297mm}{210mm}% 68425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 68435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tolerance = 700 68445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hfuzz = 1pt 68455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \contentsrightmargin = 0pt 68465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \defbodyindent = 5mm 68475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}} 68485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 68495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Use @afivepaper to print on European A5 paper. 68505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% From romildo@urano.iceb.ufop.br, 2 July 2000. 68515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% He also recommends making @example and @lisp be small. 68525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\afivepaper{{\globaldefs = 1 68535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parskip = 2pt plus 1pt minus 0.1pt 68545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \textleading = 12.5pt 68555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 68565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \internalpagesizes{160mm}{120mm}% 68575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\voffset}{\hoffset}% 68585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\bindingoffset}{8pt}% 68595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {210mm}{148mm}% 68605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 68615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \lispnarrowing = 0.2in 68625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tolerance = 800 68635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \hfuzz = 1.2pt 68645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \contentsrightmargin = 0pt 68655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \defbodyindent = 2mm 68665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \tableindent = 12mm 68675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}} 68685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 68695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% A specific text layout, 24x15cm overall, intended for A4 paper. 68705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\afourlatex{{\globaldefs = 1 68715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \afourpaper 68725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \internalpagesizes{237mm}{150mm}% 68735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\voffset}{4.6mm}% 68745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\bindingoffset}{7mm}% 68755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {297mm}{210mm}% 68765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 68775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Must explicitly reset to 0 because we call \afourpaper. 68785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \globaldefs = 0 68795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}} 68805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 68815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Use @afourwide to print on A4 paper in landscape format. 68825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\afourwide{{\globaldefs = 1 68835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \afourpaper 68845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \internalpagesizes{241mm}{165mm}% 68855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\voffset}{-2.95mm}% 68865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\bindingoffset}{7mm}% 68875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {297mm}{210mm}% 68885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \globaldefs = 0 68895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}} 68905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 68915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @pagesizes TEXTHEIGHT[,TEXTWIDTH] 68925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Perhaps we should allow setting the margins, \topskip, \parskip, 68935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and/or leading, also. Or perhaps we should compute them somehow. 68945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 68955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\pagesizes{\pagesizesyyy #1,,\finish} 68965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pagesizesyyy#1,#2,#3\finish{{% 68975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi 68985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \globaldefs = 1 68995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 69005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \parskip = 3pt plus 2pt minus 1pt 69015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \setleading{\textleading}% 69025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 69035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dimen0 = #1 69045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\dimen0 by \voffset 69055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 69065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \dimen2 = \hsize 69075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \advance\dimen2 by \normaloffset 69085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % 69095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \internalpagesizes{#1}{\hsize}% 69105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\voffset}{\normaloffset}% 69115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\bindingoffset}{44pt}% 69125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project {\dimen0}{\dimen2}% 69135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}} 69145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 69155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Set default to letter. 69165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 69175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\letterpaper 69185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 69195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 69205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{and turning on texinfo input format.} 69215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 69225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define macros to output various characters with catcode for normal text. 69235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\"=\other 69245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\~=\other 69255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\^=\other 69265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\_=\other 69275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\|=\other 69285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\<=\other 69295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\>=\other 69305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\+=\other 69315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\$=\other 69325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normaldoublequote{"} 69335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normaltilde{~} 69345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normalcaret{^} 69355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normalunderscore{_} 69365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normalverticalbar{|} 69375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normalless{<} 69385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normalgreater{>} 69395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normalplus{+} 69405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normaldollar{$}%$ font-lock fix 69415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 69425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This macro is used to make a character print one way in \tt 69435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (where it can probably be output as-is), and another way in other fonts, 69445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% where something hairier probably needs to be done. 69455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 69465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is what to print if we are indeed using \tt; #2 is what to print 69475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% otherwise. Since all the Computer Modern typewriter fonts have zero 69485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% interword stretch (and shrink), and it is reasonable to expect all 69495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% typewriter fonts to have this, we can check that font parameter. 69505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 69515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} 69525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 69535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Same as above, but check for italic font. Actually this also catches 69545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% non-italic slanted fonts since it is impossible to distinguish them from 69555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% italic fonts. But since this is only used by $ and it uses \sl anyway 69565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% this is not a problem. 69575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} 69585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 69595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Turn off all special characters except @ 69605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (and those which the user can use as if they were ordinary). 69615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Most of these we simply print from the \tt font, but for some, we can 69625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% use math or other variants that look better in normal text. 69635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 69645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\"=\active 69655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\activedoublequote{{\tt\char34}} 69665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let"=\activedoublequote 69675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\~=\active 69685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def~{{\tt\char126}} 69695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\hat=`\^ 69705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\^=\active 69715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def^{{\tt \hat}} 69725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 69735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\_=\active 69745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def_{\ifusingtt\normalunderscore\_} 69755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Subroutine for the previous macro. 69765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } 69775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 69785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\|=\active 69795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def|{{\tt\char124}} 69805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef \less=`\< 69815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\<=\active 69825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def<{{\tt \less}} 69835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef \gtr=`\> 69845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\>=\active 69855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def>{{\tt \gtr}} 69865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\+=\active 69875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def+{{\tt \char 43}} 69885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\$=\active 69895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix 69905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 69915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If a .fmt file is being used, characters that might appear in a file 69925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% name cannot be active until we have parsed the command line. 69935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% So turn them off again, and have \everyjob (or @setfilename) turn them on. 69945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \otherifyactive is called near the end of this file. 69955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} 69965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 69975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\@=0 69985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 69995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \backslashcurfont outputs one backslash character in current font, 70005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% as in \char`\\. 70015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\chardef\backslashcurfont=`\\ 70025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work 70035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 70045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \rawbackslash defines an active \ to do \backslashcurfont. 70055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \otherbackslash defines an active \ to be a literal `\' character with 70065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% catcode other. 70075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\catcode`\\=\active 70085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @gdef@rawbackslash{@let\=@backslashcurfont} 70095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @gdef@otherbackslash{@let\=@realbackslash} 70105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 70115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 70125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \realbackslash is an actual character `\' with catcode other. 70135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\catcode`\\=\other @gdef@realbackslash{\}} 70145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 70155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \normalbackslash outputs one backslash in fixed width font. 70165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normalbackslash{{\tt\backslashcurfont}} 70175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 70185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\\=\active 70195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 70205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Used sometimes to turn off (effectively) the active characters 70215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% even after parsing them. 70225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@def@turnoffactive{% 70235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @let"=@normaldoublequote 70245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @let\=@realbackslash 70255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @let~=@normaltilde 70265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @let^=@normalcaret 70275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @let_=@normalunderscore 70285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @let|=@normalverticalbar 70295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @let<=@normalless 70305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @let>=@normalgreater 70315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @let+=@normalplus 70325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @let$=@normaldollar %$ font-lock fix 70335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @unsepspaces 70345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 70355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 70365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of 70375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the literal character `\'. (Thus, \ is not expandable when this is in 70385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% effect.) 70395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 70405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash} 70415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 70425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Make _ and + \other characters, temporarily. 70435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This is canceled by @fixbackslash. 70445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@otherifyactive 70455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 70465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If a .fmt file is being used, we don't want the `\input texinfo' to show up. 70475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% That is what \eatinput is for; after that, the `\' should revert to printing 70485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% a backslash. 70495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 70505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@gdef@eatinput input texinfo{@fixbackslash} 70515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@global@let\ = @eatinput 70525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 70535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% On the other hand, perhaps the file did not have a `\input texinfo'. Then 70545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the first `\{ in the file would cause an error. This macro tries to fix 70555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% that, assuming it is called before the first `\' could plausibly occur. 70565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Also back turn on active characters that might appear in the input 70575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% file name, in case not using a pre-dumped format. 70585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 70595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@gdef@fixbackslash{% 70605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @ifx\@eatinput @let\ = @normalbackslash @fi 70615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @catcode`+=@active 70625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @catcode`@_=@active 70635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} 70645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 70655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Say @foo, not \foo, in error messages. 70665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@escapechar = `@@ 70675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 70685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% These look ok in all fonts, so just make them not special. 70695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@catcode`@& = @other 70705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@catcode`@# = @other 70715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@catcode`@% = @other 70725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 70735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 70745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@c Local variables: 70755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@c eval: (add-hook 'write-file-hooks 'time-stamp) 70765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@c page-delimiter: "^\\\\message" 70775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@c time-stamp-start: "def\\\\texinfoversion{" 70785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@c time-stamp-format: "%:y-%02m-%02d.%02H" 70795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@c time-stamp-end: "}" 70805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@c End: 70815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 70825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@c vim:sw=2: 70835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 70845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@ignore 70855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 70865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@end ignore 7087