Statistics
| Branch: | Tag: | Revision:

root / docs / build / latex / sphinx.sty @ 216bb34c

History | View | Annotate | Download (22.3 kB)

1 216bb34c Shikhar Bhushan
%
2 216bb34c Shikhar Bhushan
% sphinx.sty
3 216bb34c Shikhar Bhushan
%
4 216bb34c Shikhar Bhushan
% Adapted from the old python.sty, mostly written by Fred Drake,
5 216bb34c Shikhar Bhushan
% by Georg Brandl.
6 216bb34c Shikhar Bhushan
%
7 216bb34c Shikhar Bhushan
8 216bb34c Shikhar Bhushan
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
9 216bb34c Shikhar Bhushan
\ProvidesPackage{sphinx}[2008/05/01 LaTeX package (Sphinx markup)]
10 216bb34c Shikhar Bhushan
11 216bb34c Shikhar Bhushan
\RequirePackage{textcomp}
12 216bb34c Shikhar Bhushan
\RequirePackage{fancyhdr}
13 216bb34c Shikhar Bhushan
\RequirePackage{fancybox}
14 216bb34c Shikhar Bhushan
\RequirePackage{titlesec}
15 216bb34c Shikhar Bhushan
\RequirePackage{tabulary}
16 216bb34c Shikhar Bhushan
\RequirePackage{amsmath} % for \text
17 216bb34c Shikhar Bhushan
\RequirePackage{makeidx}
18 216bb34c Shikhar Bhushan
\RequirePackage{framed}
19 216bb34c Shikhar Bhushan
\RequirePackage{color}
20 216bb34c Shikhar Bhushan
% For highlighted code.
21 216bb34c Shikhar Bhushan
\RequirePackage{fancyvrb}
22 216bb34c Shikhar Bhushan
% For table captions.
23 216bb34c Shikhar Bhushan
\RequirePackage{threeparttable}
24 216bb34c Shikhar Bhushan
% Handle footnotes in tables.
25 216bb34c Shikhar Bhushan
\RequirePackage{footnote}
26 216bb34c Shikhar Bhushan
\makesavenoteenv{tabulary}
27 216bb34c Shikhar Bhushan
% For floating figures in the text.
28 216bb34c Shikhar Bhushan
\RequirePackage{wrapfig}
29 216bb34c Shikhar Bhushan
30 216bb34c Shikhar Bhushan
% Redefine these colors to your liking in the preamble.
31 216bb34c Shikhar Bhushan
\definecolor{TitleColor}{rgb}{0.126,0.263,0.361}
32 216bb34c Shikhar Bhushan
\definecolor{InnerLinkColor}{rgb}{0.208,0.374,0.486}
33 216bb34c Shikhar Bhushan
\definecolor{OuterLinkColor}{rgb}{0.216,0.439,0.388}
34 216bb34c Shikhar Bhushan
% Redefine these colors to something not white if you want to have colored
35 216bb34c Shikhar Bhushan
% background and border for code examples.
36 216bb34c Shikhar Bhushan
\definecolor{VerbatimColor}{rgb}{1,1,1}
37 216bb34c Shikhar Bhushan
\definecolor{VerbatimBorderColor}{rgb}{1,1,1}
38 216bb34c Shikhar Bhushan
39 216bb34c Shikhar Bhushan
% Uncomment these two lines to ignore the paper size and make the page 
40 216bb34c Shikhar Bhushan
% size more like a typical published manual.
41 216bb34c Shikhar Bhushan
%\renewcommand{\paperheight}{9in}
42 216bb34c Shikhar Bhushan
%\renewcommand{\paperwidth}{8.5in}   % typical squarish manual
43 216bb34c Shikhar Bhushan
%\renewcommand{\paperwidth}{7in}     % O'Reilly ``Programmming Python''
44 216bb34c Shikhar Bhushan
45 216bb34c Shikhar Bhushan
% For graphicx, check if we are compiling under latex or pdflatex.
46 216bb34c Shikhar Bhushan
\ifx\pdftexversion\undefined
47 216bb34c Shikhar Bhushan
  \usepackage{graphicx}
48 216bb34c Shikhar Bhushan
\else
49 216bb34c Shikhar Bhushan
  \usepackage[pdftex]{graphicx}
50 216bb34c Shikhar Bhushan
\fi
51 216bb34c Shikhar Bhushan
52 216bb34c Shikhar Bhushan
% for PDF output, use colors and maximal compression
53 216bb34c Shikhar Bhushan
\newif\ifsphinxpdfoutput\sphinxpdfoutputfalse
54 216bb34c Shikhar Bhushan
\ifx\pdfoutput\undefined\else\ifcase\pdfoutput
55 216bb34c Shikhar Bhushan
  \let\py@NormalColor\relax
56 216bb34c Shikhar Bhushan
  \let\py@TitleColor\relax
57 216bb34c Shikhar Bhushan
\else
58 216bb34c Shikhar Bhushan
  \sphinxpdfoutputtrue
59 216bb34c Shikhar Bhushan
  \input{pdfcolor}
60 216bb34c Shikhar Bhushan
  \def\py@NormalColor{\color[rgb]{0.0,0.0,0.0}}
61 216bb34c Shikhar Bhushan
  \def\py@TitleColor{\color{TitleColor}}
62 216bb34c Shikhar Bhushan
  \pdfcompresslevel=9
63 216bb34c Shikhar Bhushan
\fi\fi
64 216bb34c Shikhar Bhushan
65 216bb34c Shikhar Bhushan
% XeLaTeX can do colors, too
66 216bb34c Shikhar Bhushan
\ifx\XeTeXrevision\undefined\else
67 216bb34c Shikhar Bhushan
  \def\py@NormalColor{\color[rgb]{0.0,0.0,0.0}}
68 216bb34c Shikhar Bhushan
  \def\py@TitleColor{\color{TitleColor}}
69 216bb34c Shikhar Bhushan
\fi
70 216bb34c Shikhar Bhushan
71 216bb34c Shikhar Bhushan
% Increase printable page size (copied from fullpage.sty)
72 216bb34c Shikhar Bhushan
\topmargin 0pt
73 216bb34c Shikhar Bhushan
\advance \topmargin by -\headheight
74 216bb34c Shikhar Bhushan
\advance \topmargin by -\headsep
75 216bb34c Shikhar Bhushan
76 216bb34c Shikhar Bhushan
% attempt to work a little better for A4 users
77 216bb34c Shikhar Bhushan
\textheight \paperheight
78 216bb34c Shikhar Bhushan
\advance\textheight by -2in
79 216bb34c Shikhar Bhushan
80 216bb34c Shikhar Bhushan
\oddsidemargin 0pt
81 216bb34c Shikhar Bhushan
\evensidemargin 0pt
82 216bb34c Shikhar Bhushan
%\evensidemargin -.25in  % for ``manual size'' documents
83 216bb34c Shikhar Bhushan
\marginparwidth 0.5in
84 216bb34c Shikhar Bhushan
85 216bb34c Shikhar Bhushan
\textwidth \paperwidth
86 216bb34c Shikhar Bhushan
\advance\textwidth by -2in
87 216bb34c Shikhar Bhushan
88 216bb34c Shikhar Bhushan
89 216bb34c Shikhar Bhushan
% Style parameters and macros used by most documents here
90 216bb34c Shikhar Bhushan
\raggedbottom
91 216bb34c Shikhar Bhushan
\sloppy
92 216bb34c Shikhar Bhushan
\parindent = 0mm
93 216bb34c Shikhar Bhushan
\parskip = 2mm
94 216bb34c Shikhar Bhushan
\hbadness = 5000                % don't print trivial gripes
95 216bb34c Shikhar Bhushan
96 216bb34c Shikhar Bhushan
\pagestyle{empty}               % start this way; change for
97 216bb34c Shikhar Bhushan
\pagenumbering{roman}           % ToC & chapters
98 216bb34c Shikhar Bhushan
99 216bb34c Shikhar Bhushan
% Use this to set the font family for headers and other decor:
100 216bb34c Shikhar Bhushan
\newcommand{\py@HeaderFamily}{\sffamily\bfseries}
101 216bb34c Shikhar Bhushan
102 216bb34c Shikhar Bhushan
% Redefine the 'normal' header/footer style when using "fancyhdr" package:
103 216bb34c Shikhar Bhushan
\@ifundefined{fancyhf}{}{
104 216bb34c Shikhar Bhushan
  % Use \pagestyle{normal} as the primary pagestyle for text.
105 216bb34c Shikhar Bhushan
  \fancypagestyle{normal}{
106 216bb34c Shikhar Bhushan
    \fancyhf{}
107 216bb34c Shikhar Bhushan
    \fancyfoot[LE,RO]{{\py@HeaderFamily\thepage}}
108 216bb34c Shikhar Bhushan
    \fancyfoot[LO]{{\py@HeaderFamily\nouppercase{\rightmark}}}
109 216bb34c Shikhar Bhushan
    \fancyfoot[RE]{{\py@HeaderFamily\nouppercase{\leftmark}}}
110 216bb34c Shikhar Bhushan
    \fancyhead[LE,RO]{{\py@HeaderFamily \@title, \py@release}}
111 216bb34c Shikhar Bhushan
    \renewcommand{\headrulewidth}{0.4pt}
112 216bb34c Shikhar Bhushan
    \renewcommand{\footrulewidth}{0.4pt}
113 216bb34c Shikhar Bhushan
  }
114 216bb34c Shikhar Bhushan
  % Update the plain style so we get the page number & footer line,
115 216bb34c Shikhar Bhushan
  % but not a chapter or section title.  This is to keep the first
116 216bb34c Shikhar Bhushan
  % page of a chapter and the blank page between chapters `clean.'
117 216bb34c Shikhar Bhushan
  \fancypagestyle{plain}{
118 216bb34c Shikhar Bhushan
    \fancyhf{}
119 216bb34c Shikhar Bhushan
    \fancyfoot[LE,RO]{{\py@HeaderFamily\thepage}}
120 216bb34c Shikhar Bhushan
    \renewcommand{\headrulewidth}{0pt}
121 216bb34c Shikhar Bhushan
    \renewcommand{\footrulewidth}{0.4pt}
122 216bb34c Shikhar Bhushan
  }
123 216bb34c Shikhar Bhushan
}
124 216bb34c Shikhar Bhushan
125 216bb34c Shikhar Bhushan
% Some custom font markup commands.
126 216bb34c Shikhar Bhushan
%
127 216bb34c Shikhar Bhushan
\newcommand{\strong}[1]{{\bf #1}}
128 216bb34c Shikhar Bhushan
\newcommand{\code}[1]{\texttt{#1}}
129 216bb34c Shikhar Bhushan
\newcommand{\bfcode}[1]{\code{\bfseries#1}}
130 216bb34c Shikhar Bhushan
\newcommand{\samp}[1]{`\code{#1}'}
131 216bb34c Shikhar Bhushan
\newcommand{\email}[1]{\textsf{#1}}
132 216bb34c Shikhar Bhushan
133 216bb34c Shikhar Bhushan
\newcommand{\py@modulebadkey}{{--just-some-junk--}}
134 216bb34c Shikhar Bhushan
135 216bb34c Shikhar Bhushan
% Redefine the Verbatim environment to allow border and background colors.
136 216bb34c Shikhar Bhushan
% The original environment is still used for verbatims within tables.
137 216bb34c Shikhar Bhushan
\let\OriginalVerbatim=\Verbatim
138 216bb34c Shikhar Bhushan
\let\endOriginalVerbatim=\endVerbatim
139 216bb34c Shikhar Bhushan
140 216bb34c Shikhar Bhushan
% Play with vspace to be able to keep the indentation.
141 216bb34c Shikhar Bhushan
\newlength\distancetoright
142 216bb34c Shikhar Bhushan
\newlength\leftsidespace
143 216bb34c Shikhar Bhushan
\def\mycolorbox#1{%
144 216bb34c Shikhar Bhushan
  \setlength\leftsidespace{\@totalleftmargin}%
145 216bb34c Shikhar Bhushan
  \setlength\distancetoright{\textwidth}%
146 216bb34c Shikhar Bhushan
  \advance\distancetoright -\@totalleftmargin %
147 216bb34c Shikhar Bhushan
  \noindent\hspace*{\@totalleftmargin}%
148 216bb34c Shikhar Bhushan
  \fcolorbox{VerbatimBorderColor}{VerbatimColor}{%
149 216bb34c Shikhar Bhushan
  \begin{minipage}{\distancetoright}%
150 216bb34c Shikhar Bhushan
    \smallskip%
151 216bb34c Shikhar Bhushan
    \noindent\hspace*{-\leftsidespace}%
152 216bb34c Shikhar Bhushan
    #1
153 216bb34c Shikhar Bhushan
  \end{minipage}%
154 216bb34c Shikhar Bhushan
  }%
155 216bb34c Shikhar Bhushan
}
156 216bb34c Shikhar Bhushan
\def\FrameCommand{\mycolorbox}
157 216bb34c Shikhar Bhushan
158 216bb34c Shikhar Bhushan
\renewcommand{\Verbatim}[1][1]{%
159 216bb34c Shikhar Bhushan
  % The list environement is needed to control perfectly the vertical
160 216bb34c Shikhar Bhushan
  % space.
161 216bb34c Shikhar Bhushan
  \list{}{%
162 216bb34c Shikhar Bhushan
  \setlength\parskip{0pt}%
163 216bb34c Shikhar Bhushan
  \setlength\itemsep{0ex}%
164 216bb34c Shikhar Bhushan
  \setlength\topsep{0ex}%
165 216bb34c Shikhar Bhushan
  \setlength\partopsep{0pt}%
166 216bb34c Shikhar Bhushan
  \setlength\leftmargin{0pt}%
167 216bb34c Shikhar Bhushan
  }%
168 216bb34c Shikhar Bhushan
  \item\MakeFramed {\FrameRestore}%
169 216bb34c Shikhar Bhushan
     \small%
170 216bb34c Shikhar Bhushan
    \OriginalVerbatim[#1]%
171 216bb34c Shikhar Bhushan
}
172 216bb34c Shikhar Bhushan
\renewcommand{\endVerbatim}{%
173 216bb34c Shikhar Bhushan
    \endOriginalVerbatim%
174 216bb34c Shikhar Bhushan
  \endMakeFramed%
175 216bb34c Shikhar Bhushan
  \endlist%
176 216bb34c Shikhar Bhushan
}
177 216bb34c Shikhar Bhushan
178 216bb34c Shikhar Bhushan
179 216bb34c Shikhar Bhushan
% Index-entry generation support.
180 216bb34c Shikhar Bhushan
%
181 216bb34c Shikhar Bhushan
182 216bb34c Shikhar Bhushan
% Command to generate two index entries (using subentries)
183 216bb34c Shikhar Bhushan
\newcommand{\indexii}[2]{\index{#1!#2}\index{#2!#1}}
184 216bb34c Shikhar Bhushan
185 216bb34c Shikhar Bhushan
% And three entries (using only one level of subentries)
186 216bb34c Shikhar Bhushan
\newcommand{\indexiii}[3]{\index{#1!#2 #3}\index{#2!#3, #1}\index{#3!#1 #2}}
187 216bb34c Shikhar Bhushan
188 216bb34c Shikhar Bhushan
% And four (again, using only one level of subentries)
189 216bb34c Shikhar Bhushan
\newcommand{\indexiv}[4]{
190 216bb34c Shikhar Bhushan
\index{#1!#2 #3 #4}
191 216bb34c Shikhar Bhushan
\index{#2!#3 #4, #1}
192 216bb34c Shikhar Bhushan
\index{#3!#4, #1 #2}
193 216bb34c Shikhar Bhushan
\index{#4!#1 #2 #3}
194 216bb34c Shikhar Bhushan
}
195 216bb34c Shikhar Bhushan
196 216bb34c Shikhar Bhushan
% support for the module index
197 216bb34c Shikhar Bhushan
\newif\ifpy@UseModuleIndex
198 216bb34c Shikhar Bhushan
\py@UseModuleIndexfalse
199 216bb34c Shikhar Bhushan
200 216bb34c Shikhar Bhushan
\newcommand{\makemodindex}{
201 216bb34c Shikhar Bhushan
  \newwrite\modindexfile
202 216bb34c Shikhar Bhushan
  \openout\modindexfile=mod\jobname.idx
203 216bb34c Shikhar Bhushan
  \py@UseModuleIndextrue
204 216bb34c Shikhar Bhushan
}
205 216bb34c Shikhar Bhushan
206 216bb34c Shikhar Bhushan
\newcommand{\printmodindex}{
207 216bb34c Shikhar Bhushan
  \@input@{mod\jobname.ind}
208 216bb34c Shikhar Bhushan
}
209 216bb34c Shikhar Bhushan
210 216bb34c Shikhar Bhushan
% Add the defining entry for a module
211 216bb34c Shikhar Bhushan
\newcommand{\py@modindex}[2]{%
212 216bb34c Shikhar Bhushan
  \renewcommand{\py@thismodule}{#1}
213 216bb34c Shikhar Bhushan
  \ifpy@UseModuleIndex%
214 216bb34c Shikhar Bhushan
    \@ifundefined{py@modplat@\py@thismodulekey}{
215 216bb34c Shikhar Bhushan
      \write\modindexfile{\protect\indexentry{#1@{\texttt{#1}}|hyperpage}{\thepage}}%
216 216bb34c Shikhar Bhushan
    }{\write\modindexfile{\protect\indexentry{#1@{\texttt{#1 }%
217 216bb34c Shikhar Bhushan
        \emph{(\platformof{\py@thismodulekey})}}|hyperpage}{\thepage}}%
218 216bb34c Shikhar Bhushan
    }
219 216bb34c Shikhar Bhushan
  \fi%
220 216bb34c Shikhar Bhushan
}
221 216bb34c Shikhar Bhushan
222 216bb34c Shikhar Bhushan
% "Current" keys
223 216bb34c Shikhar Bhushan
\newcommand{\py@thisclass}{}
224 216bb34c Shikhar Bhushan
\newcommand{\py@thismodule}{}
225 216bb34c Shikhar Bhushan
\newcommand{\py@thismodulekey}{}
226 216bb34c Shikhar Bhushan
\newcommand{\py@thismoduletype}{}
227 216bb34c Shikhar Bhushan
\newcommand{\py@emptymodule}{}
228 216bb34c Shikhar Bhushan
229 216bb34c Shikhar Bhushan
% \declaremodule[key]{type}{name}
230 216bb34c Shikhar Bhushan
\newcommand{\declaremodule}[3][\py@modulebadkey]{
231 216bb34c Shikhar Bhushan
  \renewcommand{\py@thismoduletype}{#2}
232 216bb34c Shikhar Bhushan
  \ifx\py@modulebadkey#1
233 216bb34c Shikhar Bhushan
    \renewcommand{\py@thismodulekey}{#3}
234 216bb34c Shikhar Bhushan
  \else
235 216bb34c Shikhar Bhushan
    \renewcommand{\py@thismodulekey}{#1}
236 216bb34c Shikhar Bhushan
  \fi
237 216bb34c Shikhar Bhushan
  \py@modindex{#3}{}
238 216bb34c Shikhar Bhushan
  %\label{module-\py@thismodulekey}
239 216bb34c Shikhar Bhushan
}
240 216bb34c Shikhar Bhushan
241 216bb34c Shikhar Bhushan
% Record module platforms for the Module Index
242 216bb34c Shikhar Bhushan
\newif\ifpy@ModPlatformFileIsOpen \py@ModPlatformFileIsOpenfalse
243 216bb34c Shikhar Bhushan
\long\def\py@writeModPlatformFile#1{%
244 216bb34c Shikhar Bhushan
  \protected@write\py@ModPlatformFile%
245 216bb34c Shikhar Bhushan
    {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}%
246 216bb34c Shikhar Bhushan
    {\string#1}%
247 216bb34c Shikhar Bhushan
}
248 216bb34c Shikhar Bhushan
\newcommand{\py@ModPlatformFilename}{\jobname.pla}
249 216bb34c Shikhar Bhushan
\newcommand{\platform}[1]{
250 216bb34c Shikhar Bhushan
  \ifpy@ModPlatformFileIsOpen\else
251 216bb34c Shikhar Bhushan
    \newwrite\py@ModPlatformFile
252 216bb34c Shikhar Bhushan
    \openout\py@ModPlatformFile=\py@ModPlatformFilename
253 216bb34c Shikhar Bhushan
    \py@ModPlatformFileIsOpentrue
254 216bb34c Shikhar Bhushan
  \fi
255 216bb34c Shikhar Bhushan
  \py@writeModPlatformFile{\py@defplatform{\py@thismodulekey}{#1}}
256 216bb34c Shikhar Bhushan
}
257 216bb34c Shikhar Bhushan
\newcommand{\py@defplatform}[2]{\expandafter\def\csname py@modplat@#1\endcsname{#2}}
258 216bb34c Shikhar Bhushan
\newcommand{\platformof}[1]{\csname py@modplat@#1\endcsname}
259 216bb34c Shikhar Bhushan
260 216bb34c Shikhar Bhushan
\InputIfFileExists{\jobname.pla}{}{}
261 216bb34c Shikhar Bhushan
262 216bb34c Shikhar Bhushan
% \moduleauthor{name}{email}
263 216bb34c Shikhar Bhushan
\newcommand{\moduleauthor}[2]{}
264 216bb34c Shikhar Bhushan
265 216bb34c Shikhar Bhushan
% \sectionauthor{name}{email}
266 216bb34c Shikhar Bhushan
\newcommand{\sectionauthor}[2]{}
267 216bb34c Shikhar Bhushan
268 216bb34c Shikhar Bhushan
% Ignore module synopsis.
269 216bb34c Shikhar Bhushan
\newcommand{\modulesynopsis}[1]{}
270 216bb34c Shikhar Bhushan
271 216bb34c Shikhar Bhushan
% Reset "current" objects.
272 216bb34c Shikhar Bhushan
\newcommand{\resetcurrentobjects}{
273 216bb34c Shikhar Bhushan
  \renewcommand{\py@thisclass}{}
274 216bb34c Shikhar Bhushan
  \renewcommand{\py@thismodule}{}
275 216bb34c Shikhar Bhushan
  \renewcommand{\py@thismodulekey}{}
276 216bb34c Shikhar Bhushan
  \renewcommand{\py@thismoduletype}{}
277 216bb34c Shikhar Bhushan
}
278 216bb34c Shikhar Bhushan
279 216bb34c Shikhar Bhushan
% Augment the sectioning commands used to get our own font family in place,
280 216bb34c Shikhar Bhushan
% and reset some internal data items:
281 216bb34c Shikhar Bhushan
\titleformat{\section}{\Large\py@HeaderFamily}%
282 216bb34c Shikhar Bhushan
            {\py@TitleColor\thesection}{0.5em}{\py@TitleColor}{\py@NormalColor}
283 216bb34c Shikhar Bhushan
\titleformat{\subsection}{\large\py@HeaderFamily}%
284 216bb34c Shikhar Bhushan
            {\py@TitleColor\thesubsection}{0.5em}{\py@TitleColor}{\py@NormalColor}
285 216bb34c Shikhar Bhushan
\titleformat{\subsubsection}{\py@HeaderFamily}%
286 216bb34c Shikhar Bhushan
            {\py@TitleColor\thesubsubsection}{0.5em}{\py@TitleColor}{\py@NormalColor}
287 216bb34c Shikhar Bhushan
\titleformat{\paragraph}{\large\py@HeaderFamily}%
288 216bb34c Shikhar Bhushan
            {\py@TitleColor}{0em}{\py@TitleColor}{\py@NormalColor}
289 216bb34c Shikhar Bhushan
290 216bb34c Shikhar Bhushan
291 216bb34c Shikhar Bhushan
% Now for a lot of semantically-loaded environments that do a ton of magical
292 216bb34c Shikhar Bhushan
% things to get the right formatting and index entries for the stuff in
293 216bb34c Shikhar Bhushan
% Python modules and C API.
294 216bb34c Shikhar Bhushan
295 216bb34c Shikhar Bhushan
296 216bb34c Shikhar Bhushan
% {fulllineitems} is used in one place in libregex.tex, but is really for
297 216bb34c Shikhar Bhushan
% internal use in this file.
298 216bb34c Shikhar Bhushan
%
299 216bb34c Shikhar Bhushan
\newcommand{\py@itemnewline}[1]{%
300 216bb34c Shikhar Bhushan
  \@tempdima\linewidth%
301 216bb34c Shikhar Bhushan
  \advance\@tempdima \leftmargin\makebox[\@tempdima][l]{#1}%
302 216bb34c Shikhar Bhushan
}
303 216bb34c Shikhar Bhushan
304 216bb34c Shikhar Bhushan
\newenvironment{fulllineitems}{
305 216bb34c Shikhar Bhushan
  \begin{list}{}{\labelwidth \leftmargin \labelsep 0pt
306 216bb34c Shikhar Bhushan
                 \rightmargin 0pt \topsep -\parskip \partopsep \parskip
307 216bb34c Shikhar Bhushan
                 \itemsep -\parsep
308 216bb34c Shikhar Bhushan
                 \let\makelabel=\py@itemnewline}
309 216bb34c Shikhar Bhushan
}{\end{list}}
310 216bb34c Shikhar Bhushan
311 216bb34c Shikhar Bhushan
% \optional is mostly for use in the arguments parameters to the various
312 216bb34c Shikhar Bhushan
% {*desc} environments defined below, but may be used elsewhere.  Known to
313 216bb34c Shikhar Bhushan
% be used in the debugger chapter.
314 216bb34c Shikhar Bhushan
%
315 216bb34c Shikhar Bhushan
% Typical usage:
316 216bb34c Shikhar Bhushan
%
317 216bb34c Shikhar Bhushan
%     \begin{funcdesc}{myfunc}{reqparm\optional{, optparm}}
318 216bb34c Shikhar Bhushan
%                                    ^^^       ^^^
319 216bb34c Shikhar Bhushan
%                          No space here       No space here
320 216bb34c Shikhar Bhushan
%
321 216bb34c Shikhar Bhushan
% When a function has multiple optional parameters, \optional should be
322 216bb34c Shikhar Bhushan
% nested, not chained.  This is right:
323 216bb34c Shikhar Bhushan
%
324 216bb34c Shikhar Bhushan
%     \begin{funcdesc}{myfunc}{\optional{parm1\optional{, parm2}}}
325 216bb34c Shikhar Bhushan
%
326 216bb34c Shikhar Bhushan
\let\py@badkey=\@undefined
327 216bb34c Shikhar Bhushan
328 216bb34c Shikhar Bhushan
\newcommand{\optional}[1]{%
329 216bb34c Shikhar Bhushan
  {\textnormal{\Large[}}{#1}\hspace{0.5mm}{\textnormal{\Large]}}}
330 216bb34c Shikhar Bhushan
331 216bb34c Shikhar Bhushan
% This can be used when a function or method accepts an varying number 
332 216bb34c Shikhar Bhushan
% of arguments, such as by using the *args syntax in the parameter list.
333 216bb34c Shikhar Bhushan
\newcommand{\py@moreargs}{...}
334 216bb34c Shikhar Bhushan
335 216bb34c Shikhar Bhushan
% This can be used when you don't want to document the parameters to a 
336 216bb34c Shikhar Bhushan
% function or method, but simply state that it's an alias for
337 216bb34c Shikhar Bhushan
% something else.
338 216bb34c Shikhar Bhushan
\newcommand{\py@unspecified}{...}
339 216bb34c Shikhar Bhushan
340 216bb34c Shikhar Bhushan
\newcommand{\py@varvars}[1]{{%
341 216bb34c Shikhar Bhushan
    {\let\unspecified=\py@unspecified%
342 216bb34c Shikhar Bhushan
      \let\moreargs=\py@moreargs%
343 216bb34c Shikhar Bhushan
      \emph{#1}}}}
344 216bb34c Shikhar Bhushan
345 216bb34c Shikhar Bhushan
\newlength{\py@argswidth}
346 216bb34c Shikhar Bhushan
\newcommand{\py@sigparams}[1]{%
347 216bb34c Shikhar Bhushan
  \parbox[t]{\py@argswidth}{\py@varvars{#1}\code{)}}}
348 216bb34c Shikhar Bhushan
\newcommand{\py@sigline}[2]{%
349 216bb34c Shikhar Bhushan
  \settowidth{\py@argswidth}{#1\code{(}}%
350 216bb34c Shikhar Bhushan
  \addtolength{\py@argswidth}{-2\py@argswidth}%
351 216bb34c Shikhar Bhushan
  \addtolength{\py@argswidth}{\textwidth}%
352 216bb34c Shikhar Bhushan
  \item[#1\code{(}\py@sigparams{#2}]}
353 216bb34c Shikhar Bhushan
354 216bb34c Shikhar Bhushan
% C functions ------------------------------------------------------------
355 216bb34c Shikhar Bhushan
% \begin{cfuncdesc}[refcount]{type}{name}{arglist}
356 216bb34c Shikhar Bhushan
% Note that the [refcount] slot should only be filled in by
357 216bb34c Shikhar Bhushan
% tools/anno-api.py; it pulls the value from the refcounts database.
358 216bb34c Shikhar Bhushan
\newcommand{\cfuncline}[3]{
359 216bb34c Shikhar Bhushan
  \py@sigline{\code{#1 \bfcode{#2}}}{#3}%
360 216bb34c Shikhar Bhushan
}
361 216bb34c Shikhar Bhushan
\newenvironment{cfuncdesc}[3]{
362 216bb34c Shikhar Bhushan
  \begin{fulllineitems}
363 216bb34c Shikhar Bhushan
    \cfuncline{#1}{#2}{#3}
364 216bb34c Shikhar Bhushan
}{\end{fulllineitems}}
365 216bb34c Shikhar Bhushan
366 216bb34c Shikhar Bhushan
% C variables ------------------------------------------------------------
367 216bb34c Shikhar Bhushan
% \begin{cvardesc}{type}{name}
368 216bb34c Shikhar Bhushan
\newenvironment{cvardesc}[2]{
369 216bb34c Shikhar Bhushan
  \begin{fulllineitems}
370 216bb34c Shikhar Bhushan
    \item[\code{#1 \bfcode{#2}}]
371 216bb34c Shikhar Bhushan
}{\end{fulllineitems}}
372 216bb34c Shikhar Bhushan
373 216bb34c Shikhar Bhushan
% C data types -----------------------------------------------------------
374 216bb34c Shikhar Bhushan
% \begin{ctypedesc}[index name]{typedef name}
375 216bb34c Shikhar Bhushan
\newenvironment{ctypedesc}[2][\py@badkey]{
376 216bb34c Shikhar Bhushan
  \begin{fulllineitems}
377 216bb34c Shikhar Bhushan
    \item[\bfcode{#2}]
378 216bb34c Shikhar Bhushan
}{\end{fulllineitems}}
379 216bb34c Shikhar Bhushan
380 216bb34c Shikhar Bhushan
% C type fields ----------------------------------------------------------
381 216bb34c Shikhar Bhushan
% \begin{cmemberdesc}{container type}{ctype}{membername}
382 216bb34c Shikhar Bhushan
\newcommand{\cmemberline}[3]{
383 216bb34c Shikhar Bhushan
  \item[\code{#2 \bfcode{#3}}]
384 216bb34c Shikhar Bhushan
}
385 216bb34c Shikhar Bhushan
\newenvironment{cmemberdesc}[3]{
386 216bb34c Shikhar Bhushan
  \begin{fulllineitems}
387 216bb34c Shikhar Bhushan
    \cmemberline{#1}{#2}{#3}
388 216bb34c Shikhar Bhushan
}{\end{fulllineitems}}
389 216bb34c Shikhar Bhushan
390 216bb34c Shikhar Bhushan
% Funky macros -----------------------------------------------------------
391 216bb34c Shikhar Bhushan
% \begin{csimplemacrodesc}{name}
392 216bb34c Shikhar Bhushan
% -- "simple" because it has no args; NOT for constant definitions!
393 216bb34c Shikhar Bhushan
\newenvironment{csimplemacrodesc}[1]{
394 216bb34c Shikhar Bhushan
  \begin{fulllineitems}
395 216bb34c Shikhar Bhushan
    \item[\bfcode{#1}]
396 216bb34c Shikhar Bhushan
}{\end{fulllineitems}}
397 216bb34c Shikhar Bhushan
398 216bb34c Shikhar Bhushan
% simple functions (not methods) -----------------------------------------
399 216bb34c Shikhar Bhushan
% \begin{funcdesc}{name}{args}
400 216bb34c Shikhar Bhushan
\newcommand{\funcline}[2]{%
401 216bb34c Shikhar Bhushan
  \py@sigline{\bfcode{#1}}{#2}}
402 216bb34c Shikhar Bhushan
\newenvironment{funcdesc}[2]{
403 216bb34c Shikhar Bhushan
  \begin{fulllineitems}
404 216bb34c Shikhar Bhushan
    \funcline{#1}{#2}
405 216bb34c Shikhar Bhushan
}{\end{fulllineitems}}
406 216bb34c Shikhar Bhushan
407 216bb34c Shikhar Bhushan
% classes ----------------------------------------------------------------
408 216bb34c Shikhar Bhushan
% \begin{classdesc}{name}{constructor args}
409 216bb34c Shikhar Bhushan
\newcommand{\classline}[2]{
410 216bb34c Shikhar Bhushan
  \py@sigline{\strong{class }\bfcode{#1}}{#2}}
411 216bb34c Shikhar Bhushan
\newenvironment{classdesc}[2]{
412 216bb34c Shikhar Bhushan
  % Using \renewcommand doesn't work for this, for unknown reasons:
413 216bb34c Shikhar Bhushan
  \global\def\py@thisclass{#1}
414 216bb34c Shikhar Bhushan
  \begin{fulllineitems}
415 216bb34c Shikhar Bhushan
    \classline{#1}{#2}
416 216bb34c Shikhar Bhushan
}{\end{fulllineitems}}
417 216bb34c Shikhar Bhushan
418 216bb34c Shikhar Bhushan
% \begin{excclassdesc}{name}{constructor args}
419 216bb34c Shikhar Bhushan
% but indexes as an exception
420 216bb34c Shikhar Bhushan
\newenvironment{excclassdesc}[2]{
421 216bb34c Shikhar Bhushan
  % Using \renewcommand doesn't work for this, for unknown reasons:
422 216bb34c Shikhar Bhushan
  \global\def\py@thisclass{#1}
423 216bb34c Shikhar Bhushan
  \begin{fulllineitems}
424 216bb34c Shikhar Bhushan
    \py@sigline{\strong{exception }\bfcode{#1}}{#2}%
425 216bb34c Shikhar Bhushan
}{\end{fulllineitems}}
426 216bb34c Shikhar Bhushan
427 216bb34c Shikhar Bhushan
% There is no corresponding {excclassdesc*} environment.  To describe
428 216bb34c Shikhar Bhushan
% a class exception without parameters, use the {excdesc} environment.
429 216bb34c Shikhar Bhushan
430 216bb34c Shikhar Bhushan
431 216bb34c Shikhar Bhushan
\let\py@classbadkey=\@undefined
432 216bb34c Shikhar Bhushan
433 216bb34c Shikhar Bhushan
% object method ----------------------------------------------------------
434 216bb34c Shikhar Bhushan
% \begin{methoddesc}[classname]{methodname}{args}
435 216bb34c Shikhar Bhushan
\newcommand{\methodline}[3][\@undefined]{
436 216bb34c Shikhar Bhushan
  \py@sigline{\bfcode{#2}}{#3}}
437 216bb34c Shikhar Bhushan
\newenvironment{methoddesc}[3][\@undefined]{
438 216bb34c Shikhar Bhushan
  \begin{fulllineitems}
439 216bb34c Shikhar Bhushan
    \ifx\@undefined#1\relax
440 216bb34c Shikhar Bhushan
      \methodline{#2}{#3}
441 216bb34c Shikhar Bhushan
    \else
442 216bb34c Shikhar Bhushan
      \def\py@thisclass{#1}
443 216bb34c Shikhar Bhushan
      \methodline{#2}{#3}
444 216bb34c Shikhar Bhushan
    \fi
445 216bb34c Shikhar Bhushan
}{\end{fulllineitems}}
446 216bb34c Shikhar Bhushan
447 216bb34c Shikhar Bhushan
% static method ----------------------------------------------------------
448 216bb34c Shikhar Bhushan
% \begin{staticmethoddesc}[classname]{methodname}{args}
449 216bb34c Shikhar Bhushan
\newcommand{\staticmethodline}[3][\@undefined]{
450 216bb34c Shikhar Bhushan
  \py@sigline{static \bfcode{#2}}{#3}}
451 216bb34c Shikhar Bhushan
\newenvironment{staticmethoddesc}[3][\@undefined]{
452 216bb34c Shikhar Bhushan
  \begin{fulllineitems}
453 216bb34c Shikhar Bhushan
    \ifx\@undefined#1\relax
454 216bb34c Shikhar Bhushan
      \staticmethodline{#2}{#3}
455 216bb34c Shikhar Bhushan
    \else
456 216bb34c Shikhar Bhushan
      \def\py@thisclass{#1}
457 216bb34c Shikhar Bhushan
      \staticmethodline{#2}{#3}
458 216bb34c Shikhar Bhushan
    \fi
459 216bb34c Shikhar Bhushan
}{\end{fulllineitems}}
460 216bb34c Shikhar Bhushan
461 216bb34c Shikhar Bhushan
% class method ----------------------------------------------------------
462 216bb34c Shikhar Bhushan
% \begin{classmethoddesc}[classname]{methodname}{args}
463 216bb34c Shikhar Bhushan
\newcommand{\classmethodline}[3][\@undefined]{
464 216bb34c Shikhar Bhushan
  \py@sigline{class \bfcode{#2}}{#3}}
465 216bb34c Shikhar Bhushan
\newenvironment{classmethoddesc}[3][\@undefined]{
466 216bb34c Shikhar Bhushan
  \begin{fulllineitems}
467 216bb34c Shikhar Bhushan
    \ifx\@undefined#1\relax
468 216bb34c Shikhar Bhushan
      \classmethodline{#2}{#3}
469 216bb34c Shikhar Bhushan
    \else
470 216bb34c Shikhar Bhushan
      \def\py@thisclass{#1}
471 216bb34c Shikhar Bhushan
      \classmethodline{#2}{#3}
472 216bb34c Shikhar Bhushan
    \fi
473 216bb34c Shikhar Bhushan
}{\end{fulllineitems}}
474 216bb34c Shikhar Bhushan
475 216bb34c Shikhar Bhushan
% object data attribute --------------------------------------------------
476 216bb34c Shikhar Bhushan
% \begin{memberdesc}[classname]{membername}
477 216bb34c Shikhar Bhushan
\newcommand{\memberline}[2][\py@classbadkey]{%
478 216bb34c Shikhar Bhushan
  \ifx\@undefined#1\relax
479 216bb34c Shikhar Bhushan
    \item[\bfcode{#2}]
480 216bb34c Shikhar Bhushan
  \else
481 216bb34c Shikhar Bhushan
    \item[\bfcode{#2}]
482 216bb34c Shikhar Bhushan
  \fi
483 216bb34c Shikhar Bhushan
}
484 216bb34c Shikhar Bhushan
\newenvironment{memberdesc}[2][\py@classbadkey]{
485 216bb34c Shikhar Bhushan
  \begin{fulllineitems}
486 216bb34c Shikhar Bhushan
    \ifx\@undefined#1\relax
487 216bb34c Shikhar Bhushan
      \memberline{#2}
488 216bb34c Shikhar Bhushan
    \else
489 216bb34c Shikhar Bhushan
      \def\py@thisclass{#1}
490 216bb34c Shikhar Bhushan
      \memberline{#2}
491 216bb34c Shikhar Bhushan
    \fi
492 216bb34c Shikhar Bhushan
}{\end{fulllineitems}}
493 216bb34c Shikhar Bhushan
494 216bb34c Shikhar Bhushan
% For exceptions: --------------------------------------------------------
495 216bb34c Shikhar Bhushan
% \begin{excdesc}{name}
496 216bb34c Shikhar Bhushan
%  -- for constructor information, use excclassdesc instead
497 216bb34c Shikhar Bhushan
\newenvironment{excdesc}[1]{
498 216bb34c Shikhar Bhushan
  \begin{fulllineitems}
499 216bb34c Shikhar Bhushan
    \item[\strong{exception }\bfcode{#1}]
500 216bb34c Shikhar Bhushan
}{\end{fulllineitems}}
501 216bb34c Shikhar Bhushan
502 216bb34c Shikhar Bhushan
% Module data or constants: ----------------------------------------------
503 216bb34c Shikhar Bhushan
% \begin{datadesc}{name}
504 216bb34c Shikhar Bhushan
\newcommand{\dataline}[1]{%
505 216bb34c Shikhar Bhushan
  \item[\bfcode{#1}]\nopagebreak}
506 216bb34c Shikhar Bhushan
\newenvironment{datadesc}[1]{
507 216bb34c Shikhar Bhushan
  \begin{fulllineitems}
508 216bb34c Shikhar Bhushan
    \dataline{#1}
509 216bb34c Shikhar Bhushan
}{\end{fulllineitems}}
510 216bb34c Shikhar Bhushan
511 216bb34c Shikhar Bhushan
% bytecode instruction ---------------------------------------------------
512 216bb34c Shikhar Bhushan
% \begin{opcodedesc}{name}{var}
513 216bb34c Shikhar Bhushan
% -- {var} may be {}
514 216bb34c Shikhar Bhushan
\newenvironment{opcodedesc}[2]{
515 216bb34c Shikhar Bhushan
  \begin{fulllineitems}
516 216bb34c Shikhar Bhushan
    \item[\bfcode{#1}\quad\emph{#2}]
517 216bb34c Shikhar Bhushan
}{\end{fulllineitems}}
518 216bb34c Shikhar Bhushan
519 216bb34c Shikhar Bhushan
% generic description ----------------------------------------------------
520 216bb34c Shikhar Bhushan
\newcommand{\descline}[1]{%
521 216bb34c Shikhar Bhushan
  \item[\bfcode{#1}]\nopagebreak%
522 216bb34c Shikhar Bhushan
}
523 216bb34c Shikhar Bhushan
\newenvironment{describe}[1]{
524 216bb34c Shikhar Bhushan
  \begin{fulllineitems}
525 216bb34c Shikhar Bhushan
    \descline{#1}
526 216bb34c Shikhar Bhushan
}{\end{fulllineitems}}
527 216bb34c Shikhar Bhushan
528 216bb34c Shikhar Bhushan
% This version is being checked in for the historical record; it shows
529 216bb34c Shikhar Bhushan
% how I've managed to get some aspects of this to work.  It will not
530 216bb34c Shikhar Bhushan
% be used in practice, so a subsequent revision will change things
531 216bb34c Shikhar Bhushan
% again.  This version has problems, but shows how to do something
532 216bb34c Shikhar Bhushan
% that proved more tedious than I'd expected, so I don't want to lose
533 216bb34c Shikhar Bhushan
% the example completely.
534 216bb34c Shikhar Bhushan
%
535 216bb34c Shikhar Bhushan
\newcommand{\grammartoken}[1]{\texttt{#1}}
536 216bb34c Shikhar Bhushan
\newenvironment{productionlist}[1][\py@badkey]{
537 216bb34c Shikhar Bhushan
  \def\optional##1{{\Large[}##1{\Large]}}
538 216bb34c Shikhar Bhushan
  \def\production##1##2{\code{##1}&::=&\code{##2}\\}
539 216bb34c Shikhar Bhushan
  \def\productioncont##1{& &\code{##1}\\}
540 216bb34c Shikhar Bhushan
  \def\token##1{##1}
541 216bb34c Shikhar Bhushan
  \let\grammartoken=\token
542 216bb34c Shikhar Bhushan
  \parindent=2em
543 216bb34c Shikhar Bhushan
  \indent
544 216bb34c Shikhar Bhushan
  \begin{tabular}{lcl}
545 216bb34c Shikhar Bhushan
}{%
546 216bb34c Shikhar Bhushan
  \end{tabular}
547 216bb34c Shikhar Bhushan
}
548 216bb34c Shikhar Bhushan
549 216bb34c Shikhar Bhushan
% Notices / Admonitions
550 216bb34c Shikhar Bhushan
%
551 216bb34c Shikhar Bhushan
\newlength{\py@noticelength}
552 216bb34c Shikhar Bhushan
553 216bb34c Shikhar Bhushan
\newcommand{\py@heavybox}{
554 216bb34c Shikhar Bhushan
  \setlength{\fboxrule}{1pt}
555 216bb34c Shikhar Bhushan
  \setlength{\fboxsep}{7pt}
556 216bb34c Shikhar Bhushan
  \setlength{\py@noticelength}{\linewidth}
557 216bb34c Shikhar Bhushan
  \addtolength{\py@noticelength}{-2\fboxsep}
558 216bb34c Shikhar Bhushan
  \addtolength{\py@noticelength}{-2\fboxrule}
559 216bb34c Shikhar Bhushan
  \setlength{\shadowsize}{3pt}
560 216bb34c Shikhar Bhushan
  \Sbox
561 216bb34c Shikhar Bhushan
  \minipage{\py@noticelength}
562 216bb34c Shikhar Bhushan
}
563 216bb34c Shikhar Bhushan
\newcommand{\py@endheavybox}{
564 216bb34c Shikhar Bhushan
  \endminipage
565 216bb34c Shikhar Bhushan
  \endSbox
566 216bb34c Shikhar Bhushan
  \fbox{\TheSbox}
567 216bb34c Shikhar Bhushan
}
568 216bb34c Shikhar Bhushan
569 216bb34c Shikhar Bhushan
% Some are quite plain:
570 216bb34c Shikhar Bhushan
\newcommand{\py@noticestart@note}{}
571 216bb34c Shikhar Bhushan
\newcommand{\py@noticeend@note}{}
572 216bb34c Shikhar Bhushan
\newcommand{\py@noticestart@hint}{}
573 216bb34c Shikhar Bhushan
\newcommand{\py@noticeend@hint}{}
574 216bb34c Shikhar Bhushan
\newcommand{\py@noticestart@important}{}
575 216bb34c Shikhar Bhushan
\newcommand{\py@noticeend@important}{}
576 216bb34c Shikhar Bhushan
\newcommand{\py@noticestart@tip}{}
577 216bb34c Shikhar Bhushan
\newcommand{\py@noticeend@tip}{}
578 216bb34c Shikhar Bhushan
579 216bb34c Shikhar Bhushan
% Others gets more visible distinction:
580 216bb34c Shikhar Bhushan
\newcommand{\py@noticestart@warning}{\py@heavybox}
581 216bb34c Shikhar Bhushan
\newcommand{\py@noticeend@warning}{\py@endheavybox}
582 216bb34c Shikhar Bhushan
\newcommand{\py@noticestart@caution}{\py@heavybox}
583 216bb34c Shikhar Bhushan
\newcommand{\py@noticeend@caution}{\py@endheavybox}
584 216bb34c Shikhar Bhushan
\newcommand{\py@noticestart@attention}{\py@heavybox}
585 216bb34c Shikhar Bhushan
\newcommand{\py@noticeend@attention}{\py@endheavybox}
586 216bb34c Shikhar Bhushan
\newcommand{\py@noticestart@danger}{\py@heavybox}
587 216bb34c Shikhar Bhushan
\newcommand{\py@noticeend@danger}{\py@endheavybox}
588 216bb34c Shikhar Bhushan
\newcommand{\py@noticestart@error}{\py@heavybox}
589 216bb34c Shikhar Bhushan
\newcommand{\py@noticeend@error}{\py@endheavybox}
590 216bb34c Shikhar Bhushan
591 216bb34c Shikhar Bhushan
\newenvironment{notice}[2]{
592 216bb34c Shikhar Bhushan
  \def\py@noticetype{#1}
593 216bb34c Shikhar Bhushan
  \csname py@noticestart@#1\endcsname
594 216bb34c Shikhar Bhushan
  \par\strong{#2}
595 216bb34c Shikhar Bhushan
}{\csname py@noticeend@\py@noticetype\endcsname}
596 216bb34c Shikhar Bhushan
597 216bb34c Shikhar Bhushan
% Allow the release number to be specified independently of the
598 216bb34c Shikhar Bhushan
% \date{}.  This allows the date to reflect the document's date and
599 216bb34c Shikhar Bhushan
% release to specify the release that is documented.
600 216bb34c Shikhar Bhushan
%
601 216bb34c Shikhar Bhushan
\newcommand{\py@release}{}
602 216bb34c Shikhar Bhushan
\newcommand{\version}{}
603 216bb34c Shikhar Bhushan
\newcommand{\shortversion}{}
604 216bb34c Shikhar Bhushan
\newcommand{\releaseinfo}{}
605 216bb34c Shikhar Bhushan
\newcommand{\releasename}{Release}
606 216bb34c Shikhar Bhushan
\newcommand{\release}[1]{%
607 216bb34c Shikhar Bhushan
  \renewcommand{\py@release}{\releasename\space\version}%
608 216bb34c Shikhar Bhushan
  \renewcommand{\version}{#1}}
609 216bb34c Shikhar Bhushan
\newcommand{\setshortversion}[1]{%
610 216bb34c Shikhar Bhushan
  \renewcommand{\shortversion}{#1}}
611 216bb34c Shikhar Bhushan
\newcommand{\setreleaseinfo}[1]{%
612 216bb34c Shikhar Bhushan
  \renewcommand{\releaseinfo}{#1}}
613 216bb34c Shikhar Bhushan
614 216bb34c Shikhar Bhushan
% Allow specification of the author's address separately from the
615 216bb34c Shikhar Bhushan
% author's name.  This can be used to format them differently, which
616 216bb34c Shikhar Bhushan
% is a good thing.
617 216bb34c Shikhar Bhushan
%
618 216bb34c Shikhar Bhushan
\newcommand{\py@authoraddress}{}
619 216bb34c Shikhar Bhushan
\newcommand{\authoraddress}[1]{\renewcommand{\py@authoraddress}{#1}}
620 216bb34c Shikhar Bhushan
621 216bb34c Shikhar Bhushan
% This sets up the fancy chapter headings that make the documents look
622 216bb34c Shikhar Bhushan
% at least a little better than the usual LaTeX output.
623 216bb34c Shikhar Bhushan
%
624 216bb34c Shikhar Bhushan
\@ifundefined{ChTitleVar}{}{
625 216bb34c Shikhar Bhushan
  \ChNameVar{\raggedleft\normalsize\py@HeaderFamily}
626 216bb34c Shikhar Bhushan
  \ChNumVar{\raggedleft \bfseries\Large\py@HeaderFamily}
627 216bb34c Shikhar Bhushan
  \ChTitleVar{\raggedleft \rm\Huge\py@HeaderFamily}
628 216bb34c Shikhar Bhushan
  % This creates chapter heads without the leading \vspace*{}:
629 216bb34c Shikhar Bhushan
  \def\@makechapterhead#1{%
630 216bb34c Shikhar Bhushan
    {\parindent \z@ \raggedright \normalfont
631 216bb34c Shikhar Bhushan
      \ifnum \c@secnumdepth >\m@ne
632 216bb34c Shikhar Bhushan
        \DOCH
633 216bb34c Shikhar Bhushan
      \fi
634 216bb34c Shikhar Bhushan
      \interlinepenalty\@M
635 216bb34c Shikhar Bhushan
      \DOTI{#1}
636 216bb34c Shikhar Bhushan
    }
637 216bb34c Shikhar Bhushan
  }
638 216bb34c Shikhar Bhushan
}
639 216bb34c Shikhar Bhushan
640 216bb34c Shikhar Bhushan
% Redefine description environment so that it is usable inside fulllineitems.
641 216bb34c Shikhar Bhushan
%
642 216bb34c Shikhar Bhushan
\renewcommand{\description}{%
643 216bb34c Shikhar Bhushan
  \list{}{\labelwidth\z@%
644 216bb34c Shikhar Bhushan
          \itemindent-\leftmargin%
645 216bb34c Shikhar Bhushan
	  \labelsep5pt%
646 216bb34c Shikhar Bhushan
          \let\makelabel=\descriptionlabel}}
647 216bb34c Shikhar Bhushan
648 216bb34c Shikhar Bhushan
% Definition lists; requested by AMK for HOWTO documents.  Probably useful
649 216bb34c Shikhar Bhushan
% elsewhere as well, so keep in in the general style support.
650 216bb34c Shikhar Bhushan
%
651 216bb34c Shikhar Bhushan
\newenvironment{definitions}{%
652 216bb34c Shikhar Bhushan
  \begin{description}%
653 216bb34c Shikhar Bhushan
  \def\term##1{\item[##1]\mbox{}\\*[0mm]}
654 216bb34c Shikhar Bhushan
}{%
655 216bb34c Shikhar Bhushan
  \end{description}%
656 216bb34c Shikhar Bhushan
}
657 216bb34c Shikhar Bhushan
658 216bb34c Shikhar Bhushan
% Tell TeX about pathological hyphenation cases:
659 216bb34c Shikhar Bhushan
\hyphenation{Base-HTTP-Re-quest-Hand-ler}
660 216bb34c Shikhar Bhushan
661 216bb34c Shikhar Bhushan
662 216bb34c Shikhar Bhushan
% The following is stuff copied from docutils' latex writer.
663 216bb34c Shikhar Bhushan
%
664 216bb34c Shikhar Bhushan
\newcommand{\optionlistlabel}[1]{\bf #1 \hfill}
665 216bb34c Shikhar Bhushan
\newenvironment{optionlist}[1]
666 216bb34c Shikhar Bhushan
{\begin{list}{}
667 216bb34c Shikhar Bhushan
  {\setlength{\labelwidth}{#1}
668 216bb34c Shikhar Bhushan
   \setlength{\rightmargin}{1cm}
669 216bb34c Shikhar Bhushan
   \setlength{\leftmargin}{\rightmargin}
670 216bb34c Shikhar Bhushan
   \addtolength{\leftmargin}{\labelwidth}
671 216bb34c Shikhar Bhushan
   \addtolength{\leftmargin}{\labelsep}
672 216bb34c Shikhar Bhushan
   \renewcommand{\makelabel}{\optionlistlabel}}
673 216bb34c Shikhar Bhushan
}{\end{list}}
674 216bb34c Shikhar Bhushan
675 216bb34c Shikhar Bhushan
\newlength{\lineblockindentation}
676 216bb34c Shikhar Bhushan
\setlength{\lineblockindentation}{2.5em}
677 216bb34c Shikhar Bhushan
\newenvironment{lineblock}[1]
678 216bb34c Shikhar Bhushan
{\begin{list}{}
679 216bb34c Shikhar Bhushan
  {\setlength{\partopsep}{\parskip}
680 216bb34c Shikhar Bhushan
   \addtolength{\partopsep}{\baselineskip}
681 216bb34c Shikhar Bhushan
   \topsep0pt\itemsep0.15\baselineskip\parsep0pt
682 216bb34c Shikhar Bhushan
   \leftmargin#1}
683 216bb34c Shikhar Bhushan
 \raggedright}
684 216bb34c Shikhar Bhushan
{\end{list}}
685 216bb34c Shikhar Bhushan
686 216bb34c Shikhar Bhushan
% Redefine includgraphics for avoiding images larger than the screen size
687 216bb34c Shikhar Bhushan
% If the size is not specified.
688 216bb34c Shikhar Bhushan
\let\py@Oldincludegraphics\includegraphics
689 216bb34c Shikhar Bhushan
690 216bb34c Shikhar Bhushan
\newbox\image@box%
691 216bb34c Shikhar Bhushan
\newdimen\image@width%
692 216bb34c Shikhar Bhushan
\renewcommand\includegraphics[2][\@empty]{%
693 216bb34c Shikhar Bhushan
  \ifx#1\@empty%
694 216bb34c Shikhar Bhushan
    \setbox\image@box=\hbox{\py@Oldincludegraphics{#2}}%
695 216bb34c Shikhar Bhushan
    \image@width\wd\image@box%
696 216bb34c Shikhar Bhushan
    \ifdim \image@width>\linewidth%
697 216bb34c Shikhar Bhushan
      \setbox\image@box=\hbox{\py@Oldincludegraphics[width=\linewidth]{#2}}%
698 216bb34c Shikhar Bhushan
    \fi%
699 216bb34c Shikhar Bhushan
    \box\image@box%
700 216bb34c Shikhar Bhushan
  \else%
701 216bb34c Shikhar Bhushan
    \py@Oldincludegraphics[#1]{#2}%
702 216bb34c Shikhar Bhushan
  \fi%
703 216bb34c Shikhar Bhushan
}
704 216bb34c Shikhar Bhushan
705 216bb34c Shikhar Bhushan
706 216bb34c Shikhar Bhushan
% Fix the index and bibliography environments to add an entry to the Table of
707 216bb34c Shikhar Bhushan
% Contents; this is much nicer than just having to jump to the end of the book
708 216bb34c Shikhar Bhushan
% and flip around, especially with multiple indexes.
709 216bb34c Shikhar Bhushan
%
710 216bb34c Shikhar Bhushan
\let\py@OldTheindex=\theindex
711 216bb34c Shikhar Bhushan
\renewcommand{\theindex}{
712 216bb34c Shikhar Bhushan
  \cleardoublepage
713 216bb34c Shikhar Bhushan
  \phantomsection
714 216bb34c Shikhar Bhushan
  \py@OldTheindex
715 216bb34c Shikhar Bhushan
  \addcontentsline{toc}{chapter}{\indexname}
716 216bb34c Shikhar Bhushan
}
717 216bb34c Shikhar Bhushan
718 216bb34c Shikhar Bhushan
\let\py@OldThebibliography=\thebibliography
719 216bb34c Shikhar Bhushan
\renewcommand{\thebibliography}[1]{
720 216bb34c Shikhar Bhushan
  \cleardoublepage
721 216bb34c Shikhar Bhushan
  \phantomsection
722 216bb34c Shikhar Bhushan
  \py@OldThebibliography{1}
723 216bb34c Shikhar Bhushan
  \addcontentsline{toc}{chapter}{\bibname}
724 216bb34c Shikhar Bhushan
}
725 216bb34c Shikhar Bhushan
726 216bb34c Shikhar Bhushan
% Include hyperref last.
727 216bb34c Shikhar Bhushan
\RequirePackage[colorlinks,breaklinks,
728 216bb34c Shikhar Bhushan
                linkcolor=InnerLinkColor,filecolor=OuterLinkColor,
729 216bb34c Shikhar Bhushan
                menucolor=OuterLinkColor,pagecolor=OuterLinkColor,
730 216bb34c Shikhar Bhushan
                urlcolor=OuterLinkColor]{hyperref}
731 216bb34c Shikhar Bhushan
732 216bb34c Shikhar Bhushan
% From docutils.writers.latex2e
733 216bb34c Shikhar Bhushan
\providecommand{\DUspan}[2]{%
734 216bb34c Shikhar Bhushan
  {% group ("span") to limit the scope of styling commands
735 216bb34c Shikhar Bhushan
    \@for\node@class@name:=#1\do{%
736 216bb34c Shikhar Bhushan
    \ifcsname docutilsrole\node@class@name\endcsname%
737 216bb34c Shikhar Bhushan
      \csname docutilsrole\node@class@name\endcsname%
738 216bb34c Shikhar Bhushan
    \fi%
739 216bb34c Shikhar Bhushan
    }%
740 216bb34c Shikhar Bhushan
    {#2}% node content
741 216bb34c Shikhar Bhushan
  }% close "span"
742 216bb34c Shikhar Bhushan
}