Commit | Line | Data |
---|---|---|
1f7d590d MW |
1 | %%% -*-latex-*- |
2 | %%% | |
3 | %%% Styles and other hacking for the Sod manual | |
4 | %%% | |
5 | %%% (c) 2015 Straylight/Edgeware | |
6 | %%% | |
7 | ||
8 | %%%----- Licensing notice --------------------------------------------------- | |
9 | %%% | |
e0808c47 | 10 | %%% This file is part of the Sensible Object Design, an object system for C. |
1f7d590d MW |
11 | %%% |
12 | %%% SOD is free software; you can redistribute it and/or modify | |
13 | %%% it under the terms of the GNU General Public License as published by | |
14 | %%% the Free Software Foundation; either version 2 of the License, or | |
15 | %%% (at your option) any later version. | |
16 | %%% | |
17 | %%% SOD is distributed in the hope that it will be useful, | |
18 | %%% but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 | %%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 | %%% GNU General Public License for more details. | |
21 | %%% | |
22 | %%% You should have received a copy of the GNU General Public License | |
23 | %%% along with SOD; if not, write to the Free Software Foundation, | |
24 | %%% Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
25 | ||
26 | \ProvidesPackage{sod} | |
27 | ||
28 | %% More reference types. | |
29 | \defxref{p}{part} | |
30 | ||
ca2023b8 MW |
31 | \def\instead#1#2{#1} |
32 | ||
1f7d590d MW |
33 | %% Other languages with special typesetting. |
34 | \def\Cplusplus{C\kern-\p@++} | |
35 | \def\Csharp{C\#} | |
36 | ||
37 | %% Special maths notation. | |
38 | \def\chain#1#2{\mathsf{ch}_{#1}(#2)} | |
39 | \def\chainhead#1#2{\mathsf{hd}_{#1}(#2)} | |
40 | \def\chaintail#1#2{\mathsf{tl}_{#1}(#2)} | |
41 | ||
42 | %% Other mathematical tweaks. | |
43 | \let\implies\Rightarrow | |
44 | \let\epsilon\varepsilon | |
45 | ||
2ba6e0bd MW |
46 | %% A table heading cell. Clone and hack \multicolumn. |
47 | \def\thd{\omit\@ifnextchar[\thd@{\thd@[l]}} | |
48 | \def\thd@[#1]#2{% | |
49 | \begingroup | |
50 | \tab@multicol \tab@initread \let\tab@looped\tab@err@multi | |
51 | \tab@preamble{}\def\tab@midtext{\bfseries#2}\tab@readpreamble{#1}% | |
52 | \the\tab@preamble | |
53 | \endgroup \ignorespaces | |
54 | } | |
55 | ||
1f7d590d MW |
56 | %% Unix manpage references. |
57 | \def\man#1#2{\textbf{#1}(#2)} | |
58 | ||
59 | %% Listings don't need to be small. | |
60 | \let\listingsize\relax | |
61 | ||
fea590fe | 62 | %% Notes for later. |
228b271d | 63 | \def\fixme#1{\leavevmode\marginpar{FIXME}\index{FIXME}[FIXME: #1]} |
fea590fe | 64 | |
a4094071 | 65 | %% Diagram settings. |
7be31112 MW |
66 | \tikzset{ |
67 | every picture/.style={>=stealth, thick}, | |
68 | lit/.style={font=\sffamily} | |
69 | } | |
a4094071 | 70 | |
1f7d590d MW |
71 | %% Metavariables are italics without decoration. |
72 | \def\syntleft{\normalfont\itshape} | |
73 | \let\syntright\empty | |
74 | ||
75 | %% Literal code is in sans face. | |
5f1bbd61 | 76 | \def\codeface{\upshape\sffamily} |
ddfe4265 MW |
77 | \DeclareRobustCommand\code[1]{% |
78 | \ifmmode\hbox\else\leavevmode\fi% | |
79 | {\normalfont\codeface\/#1\/}% | |
80 | } | |
1f7d590d MW |
81 | \def\ulitleft{\normalfont\codeface} |
82 | \let\ulitright\empty | |
48ab1447 | 83 | \def\lit@i#1#2#3{\ifmmode\leavevmode\hbox\fi{#1{#3\/}#2}} |
1f7d590d MW |
84 | |
85 | %% Conditionally enter maths mode. Can't use \ensuremath here because we | |
86 | %% aren't necessarily sure where the maths will actually end. | |
87 | \let\m@maybe@end\relax | |
88 | \def\m@maybe{\ifmmode\else$\let\m@maybe@end$\fi} | |
89 | ||
90 | %% Standard syntax shortcuts. | |
91 | \atdef <#1>{\synt{#1}\@scripts} | |
92 | \atdef "#1"{\lit*{#1}\@scripts} | |
93 | \atdef `#1'{\lit{#1}\@scripts} | |
5f1bbd61 | 94 | \atdef |#1|{\lit*{#1}\@scripts} |
1f7d590d MW |
95 | |
96 | %% A handy abbreviation; `\\' itself is too good to steal. | |
97 | \atdef \\{\textbackslash} | |
98 | ||
99 | %% Intercept grammar typesetting and replace the vertical bar with the | |
100 | %% maths-font version. | |
101 | \let\@@grammar\grammar | |
102 | \def\grammar{\def\textbar{\hbox{$|$}}\@@grammar} | |
103 | ||
104 | %% Collect super- and subscripts. (Note that underscores are active for the | |
105 | %% most part.) When we're done, end maths mode if we entered it | |
106 | %% conditionally. | |
107 | \def\@scripts{\futurelet\@ch\@scripts@i} | |
108 | \begingroup\lccode`\~=`\_\lowercase{\endgroup | |
109 | \def\@scripts@i{\if1\ifx\@ch~1\else\ifx\@ch^1\else0\fi\fi% | |
110 | \expandafter\@scripts@ii\else\expandafter\m@maybe@end\fi}} | |
111 | \def\@scripts@ii#1#2{\m@maybe#1{#2}\@scripts} | |
112 | ||
113 | %% Doubling characters, maybe. Either way, chain onto \@scripts. | |
114 | \def\dbl@maybe#1{\let\@tempa#1\futurelet\@ch\dbl@maybe@i} | |
115 | \def\dbl@maybe@i{\m@maybe\ifx\@ch\@tempa\@tempa\!\@tempa% | |
116 | \expandafter\@firstoftwo\expandafter\@scripts% | |
117 | \else\@tempa\expandafter\@scripts\fi} | |
118 | ||
b13a8764 MW |
119 | %% Lookahead without eating spaces. |
120 | \def\@ifnextchar@preserve#1#2#3{% | |
121 | \let\want@= #1\def\@tempa{#2}\def\@tempb{#3}% | |
122 | \futurelet\nch@\@ifnch@p% | |
123 | } | |
124 | \def\@ifnch@p{% | |
125 | \ifx\want@\nch@\expandafter\@tempa\else\expandafter\@tempb\fi} | |
126 | ||
1f7d590d MW |
127 | %% Extra syntax for Lisp templates. These produce the maths-font versions of |
128 | %% characters, which should contrast well against the sans face used for | |
129 | %% literals. | |
130 | \atdef [{\dbl@maybe[} | |
131 | \atdef ]{\dbl@maybe]} | |
132 | \atdef {{\m@maybe\{\@scripts} | |
133 | \atdef }{\m@maybe\}\@scripts} | |
134 | \atdef ({\m@maybe(\@scripts} | |
135 | \atdef ){\m@maybe)\@scripts} | |
136 | \atdef !{\m@maybe|\@scripts} | |
137 | \def\returns{\m@maybe\longrightarrow\m@maybe@end\hspace{0.5em}\ignorespaces} | |
138 | \atdef >{\leavevmode\unskip\hspace{0.5em}\returns} | |
92608d0d MW |
139 | \atdef -{\leavevmode\hbox\bgroup\futurelet\ch@\@dash} |
140 | \def\@dash{% | |
141 | \ifx\ch@>% | |
142 | --\raisebox{.4pt}{>}% | |
143 | \def\next@{\@firstoftwo{\egroup\penalty200\relax}}% | |
a8596377 MW |
144 | \else\ifx\ch@-% |
145 | --\,% | |
146 | \def\next@{\@firstoftwo{\futurelet\ch@\@dash}}% | |
92608d0d MW |
147 | \else% |
148 | --% | |
149 | \let\next@\egroup% | |
150 | \fi\fi | |
151 | \next@% | |
152 | } | |
1f7d590d MW |
153 | |
154 | %% Comment setting. | |
888d5e58 MW |
155 | \def\comment#1{\mbox{\normalfont\itshape\/#1\/}} |
156 | \atdef /*#1*/{/*\comment{#1}*/} | |
157 | \def\@semis{\@ifnextchar;{;\@semis}\@semicomment} | |
158 | \def\@semicomment#1\\{\comment{#1}\\} | |
159 | \atdef ;#1\\{;\@semis} | |
1f7d590d MW |
160 | |
161 | %% Environment for setting programs. Newlines are explicit, because | |
162 | %% otherwise I need comments in weird places to make the vertical spacing | |
163 | %% come out properly. You can write `\obeylines' if you really want to. | |
4effe575 MW |
164 | \def\@prog{\let\prog@@cr\@tabcr\let\@tabcr\@progcr\codeface\tabbing} |
165 | \def\prog{\quote\@prog} | |
1f7d590d | 166 | \def\endprog{\endtabbing\endquote} |
4effe575 MW |
167 | \let\nprog\@prog |
168 | \let\endnprog\endtabbing | |
1f7d590d | 169 | \def\ind{\quad\=\+\kill} |
ebf5ae2e MW |
170 | \def\@progcr{\futurelet\@tempa\@progcr@i} |
171 | {\def\:{\gdef\@progcr@sp}\: {\@progcr}} | |
ca8f5d55 | 172 | \atdef~{\textasciitilde} |
ebf5ae2e MW |
173 | \def\@progcr@i{% |
174 | \ifx\@tempa\@sptoken\let\next@\@progcr@sp\else | |
175 | \if1\ifx\@tempa[1\else | |
176 | \ifx\@tempa*1\else | |
177 | 0\fi\fi | |
178 | \let\next@\prog@@cr\else | |
179 | \if1\ifx\@tempa+1\else | |
180 | \ifx\@tempa-1\else | |
181 | 0\fi\fi | |
182 | \let\next@\@progcr@ii\else | |
183 | \let\next@\@progcr@a\fi\fi\fi | |
184 | \next@} | |
185 | \def\@progcr@a{\prog@@cr*{}\ignorespaces} | |
186 | \def\@progcr@ii#1{\csname @progcr@#1\endcsname\ignorespaces} | |
187 | \@namedef{@progcr@+}{\prog@@cr[\medskipamount]} | |
188 | \@namedef{@progcr@-}{\prog@@cr*[\jot]} | |
5e4a5d53 | 189 | \def\macsl{\`\textbackslash\hskip\leftmargin} |
1f7d590d MW |
190 | |
191 | %% Put a chunk of text in a box. | |
192 | \newenvironment{boxy}[1][\q@]{% | |
9eb66c6e | 193 | \savenotes |
1f7d590d MW |
194 | \dimen@\linewidth\advance\dimen@-1.2pt\advance\dimen@-2ex% |
195 | \medskip% | |
196 | \vbox\bgroup\hrule\hbox\bgroup\vrule% | |
197 | \vbox\bgroup\vskip1ex\hbox\bgroup\hskip1ex\minipage\dimen@% | |
198 | \def\@temp{#1}\ifx\@temp\q@\else\leavevmode{\headfam\bfseries#1\quad}\fi% | |
199 | }{% | |
200 | \endminipage\hskip1ex\egroup\vskip1ex\egroup% | |
201 | \vrule\egroup\hrule\egroup% | |
202 | \medskip% | |
9eb66c6e | 203 | \spewnotes% |
1f7d590d MW |
204 | } |
205 | ||
206 | %% Lisp documentation machinery. | |
87883222 MW |
207 | \def\definedescribecategory#1{% |
208 | \@ifnextchar[{\def@desc{#1}}{\def@desc{#1}[plain]}} | |
209 | \def\def@desc#1[#2]#3{\@namedef{cat!#1}##1{#3}\@namedef{catsw!#1}{#2}} | |
072f666e MW |
210 | \def\describecategoryname{\@ifnextchar[\@descname@i{\@descname@i[]}} |
211 | \def\@descname@i[#1]#2{% | |
212 | \expandafter\let\expandafter\@tempa\csname cat!#2\endcsname% | |
19a89075 | 213 | \expandafter\let\expandafter\@tempb\csname modcat/#1\endcsname% |
b35ac53a | 214 | \ifx\@tempa\relax\@tempb{#2}\else\@tempa\@tempb\fi} |
22549a08 | 215 | \def\@mod@dispatch#1#2{\csname #1/#2\endcsname} |
894e3dc9 MW |
216 | \def\@desc@dispatch#1#2{% |
217 | \csname #1/% | |
218 | \expandafter\ifx\csname catsw!#2\endcsname\relax plain% | |
219 | \else \csname catsw!#2\endcsname \fi% | |
220 | \endcsname% | |
221 | } | |
072f666e | 222 | |
95346c38 | 223 | \definedescribecategory{sym}{symbol} |
b35ac53a MW |
224 | \definedescribecategory{fun}{#1{function}} |
225 | \definedescribecategory{gf}{generic #1{function}} | |
57bcf70e | 226 | \definedescribecategory{msg}{message} |
1f7d590d | 227 | \definedescribecategory{var}{variable} |
7cd50210 | 228 | \definedescribecategory{modvar}{module variable} |
1f7d590d | 229 | \definedescribecategory{const}{constant} |
87883222 MW |
230 | \definedescribecategory{meth}[method]{primary #1{method}} |
231 | \definedescribecategory{ar-meth}[method]{\code{:around} #1{method}} | |
232 | \definedescribecategory{be-meth}[method]{\code{:before} #1{method}} | |
233 | \definedescribecategory{af-meth}[method]{\code{:after} #1{method}} | |
1f7d590d | 234 | \definedescribecategory{cls}{class} |
db6c3279 | 235 | \definedescribecategory{rst}{restart} |
1f7d590d | 236 | \definedescribecategory{ty}{type} |
ddfe4265 | 237 | \definedescribecategory{type}{type} |
b35ac53a | 238 | \definedescribecategory{mac}{#1{macro}} |
558e70ee | 239 | \definedescribecategory{feat}{feature macro} |
b35ac53a | 240 | \definedescribecategory{lmac}{local #1{macro}} |
95346c38 MW |
241 | \definedescribecategory{parse}{parser spec} |
242 | \definedescribecategory{parseform}{parser form} | |
243 | \definedescribecategory{opt}{option handler} | |
244 | \definedescribecategory{optmac}{option macro} | |
7cd50210 | 245 | \definedescribecategory{plug}{pluggable parser} |
1f7d590d MW |
246 | \def\nlret{\\\hspace{4em}\returns} |
247 | ||
19a89075 | 248 | \@namedef{modcat/}#1{#1} |
22549a08 MW |
249 | \@namedef{modlabel/}#1{#1} |
250 | \@namedef{modindex/}#1{#1@\noexpand\code{#1}} | |
b35ac53a | 251 | |
19a89075 | 252 | \@namedef{modcat/setf}#1{\code{setf}-#1} |
22549a08 MW |
253 | \@namedef{modlabel/setf}#1{setf/#1} |
254 | \@namedef{modindex/setf}#1{#1@\noexpand\code{#1}} | |
b35ac53a | 255 | |
63288801 MW |
256 | \@namedef{modcat/muffs}#1{#1} |
257 | \@namedef{modlabel/muffs}#1{*#1*} | |
258 | \@namedef{modindex/muffs}#1{#1@\noexpand\code{*#1*}} | |
259 | ||
260 | \@namedef{modcat/kwd}#1{#1} | |
261 | \@namedef{modlabel/kwd}#1{:#1} | |
262 | \@namedef{modindex/kwd}#1{#1@\noexpand\code{:#1}} | |
263 | ||
87883222 | 264 | \@namedef{descargs/plain}#1{#1{}} |
22549a08 | 265 | \@namedef{desclabel/plain}#1#2#3{#1:\@mod@dispatch{modlabel}{#2}{#3}} |
87883222 | 266 | \@namedef{descindex/plain}#1#2#3{% |
22549a08 | 267 | \@mod@dispatch{modindex}{#2}{#3}!% |
87883222 MW |
268 | \protect\describecategoryname[#2]{#1}% |
269 | } | |
270 | ||
271 | \@namedef{descargs/method}#1#2{#1{{#2}}} | |
22549a08 MW |
272 | \@namedef{desclabel/method}#1#2#3#4% |
273 | {#1:\@mod@dispatch{modlabel}{#2}{#3}(#4)} | |
87883222 | 274 | \@namedef{descindex/method}#1#2#3#4{% |
22549a08 | 275 | \@mod@dispatch{modindex}{#2}{#3}!% |
87883222 MW |
276 | \protect\describecategoryname[#2]{#1}% |
277 | \protect\fmtspecs{ specialized at }{#4}% | |
278 | } | |
279 | ||
1f7d590d | 280 | \def\q@{\q@} |
072f666e | 281 | \def\@setf{setf} |
2242bae8 | 282 | |
87883222 MW |
283 | \def\fmtspecs#1#2{% |
284 | \if!#2!\else\count@\z@\toks@{}#1\@fmtspecs@i#2,\q@,\fi} | |
285 | \def\@fmtspecs@i#1,{% | |
286 | \def\@tempa{#1}% | |
287 | \ifx\@tempa\q@% | |
288 | \ifcase\count@(no args?!)% | |
289 | \or% nothin' doin | |
290 | \or \space and % | |
291 | \else, and % | |
292 | \fi% | |
293 | \the\toks@% | |
294 | \else% | |
295 | \ifnum\count@>\@ne, \fi% | |
296 | \the\toks@% | |
297 | \toks@{\code{#1}}\advance\count@\@ne% | |
298 | \expandafter\@fmtspecs@i% | |
299 | \fi% | |
300 | } | |
301 | ||
be18b63c | 302 | %% \parse@dhd{NEXT}[MOD]{CAT}{...}...[NAME]{SYNOPSIS} |
87883222 MW |
303 | %% call NEXT{MOD}{CAT}{{...}...}{NAME}{SYNOPSIS} |
304 | %% #1 #2 #3 #4 #5 | |
be18b63c | 305 | \def\@setf{setf} |
63288801 | 306 | \def\@starstar{**} |
be18b63c MW |
307 | \def\parse@dhd#1{% {NEXT} |
308 | \@ifnextchar[{\parse@dhd@a{#1}}{\parse@dhd@c{#1}}} | |
309 | \def\parse@dhd@a#1[#2]#3{% {NEXT}[MOD]{CAT} | |
310 | \@desc@dispatch{descargs}{#3}{\parse@dhd@ab{#1}{#2}{#3}}} | |
311 | \def\parse@dhd@ab#1#2#3#4{% {NEXT}{MOD}{CAT}{{...}...} | |
312 | \@ifnextchar[{\parse@dhd@ac{#1}{#2}{#3}{#4}}{\parse@dhd@ad{#1}{#2}{#3}{#4}}} | |
313 | \def\parse@dhd@ac#1#2#3#4[#5]#6{% {NEXT}{MOD}{CAT}{{...}...}[NAME]{SYNOPSIS} | |
314 | #1{#2}{#3}{#4}{#5}{#6}} | |
315 | \def\parse@dhd@ad#1#2#3#4#5{% {NEXT}{MOD}{CAT}{{...}...}{NAME [ARGS...]} | |
316 | \parse@dhd@ae{#1}{#2}{#3}{#4}{#5}#5 \q@} | |
317 | \def\parse@dhd@ae#1#2#3#4#5#6 #7\q@{% | |
318 | % {NEXT}{MOD}{CAT}{{...}...}{SYNSOPSIS}NAME [ARGS...]\q@ | |
319 | #1{#2}{#3}{#4}{#6}{#5}} | |
320 | ||
321 | \def\parse@dhd@c#1#2{% {NEXT}{CAT} | |
87883222 MW |
322 | \@desc@dispatch{descargs}{#2}{\parse@dhd@cb{#1}{#2}}} |
323 | \def\parse@dhd@cb#1#2#3{% {NEXT}{CAT}{{...}...} | |
324 | \@ifnextchar[{\parse@dhd@cc{#1}{#2}{#3}}{\parse@dhd@cd{#1}{#2}{#3}}} | |
325 | \def\parse@dhd@cc#1#2#3[#4]#5{% {NEXT}{CAT}{{...}...}[NAME]{SYNOPSIS} | |
326 | #1{}{#2}{#3}{#4}{#5}} | |
327 | \def\parse@dhd@cd#1#2#3#4{% {NEXT}{CAT}{{...}...}{SYNOPSIS} | |
328 | \parse@dhd@ce{#1}{#2}{#3}{#4}#4 \q@} | |
329 | \def\parse@dhd@ce#1#2#3#4#5 #6\q@{% | |
330 | % {NEXT}{CAT}{{...}...}{SYNOPSIS}NAME [ARGS...]\q@ | |
331 | \def\temp@{#5}% | |
332 | \ifx\@setf\temp@\def\next@{\parse@dhd@csetf{#1}{#2}{#3}{#4}#6 \q@}% | |
63288801 MW |
333 | \else\def\temp@##1##2*##3\q@{\def\temp@{##1##3}}\temp@#5*\q@% |
334 | \ifx\temp@\@starstar\def\next@{\parse@dhd@cmuffs{#1}{#2}{#3}{#4}#5}% | |
335 | \else\def\temp@##1##2\q@{\def\temp@{##1}}\temp@#5\q@% | |
336 | \if:\temp@\def\next@{\parse@dhd@ckwd{#1}{#2}{#3}{#4}#5\q@}% | |
337 | \else\def\next@{#1{}{#2}{#3}{#5}{#4}}\fi\fi\fi% | |
072f666e MW |
338 | \next@% |
339 | } | |
87883222 MW |
340 | \def\parse@dhd@csetf#1#2#3#4(#5 #6\q@{% |
341 | % {NEXT}{CAT}{{...}...}{SYNOPSIS}(NAME [ARGS...])\q@ | |
342 | #1{setf}{#2}{#3}{#5}{#4}} | |
63288801 MW |
343 | \def\parse@dhd@cmuffs#1#2#3#4*#5*{% |
344 | % {NEXT}{CAT}{{...}...}{SYNOPSIS}*NAME* | |
345 | #1{muffs}{#2}{#3}{#5}{#4}} | |
346 | \def\parse@dhd@ckwd#1#2#3#4:#5\q@{% | |
347 | % {NEXT}{CAT}{{...}...}{SYNOPSIS}:NAME\q@ | |
348 | #1{kwd}{#2}{#3}{#5}{#4}} | |
7e94c5fe MW |
349 | |
350 | \newif\if@dheadfirst | |
351 | \def\dhead{\parse@dhd\dhead@} | |
87883222 | 352 | \def\dhead@#1#2#3#4#5{% {MOD}{CAT}{{...}...}{NAME}{SYNOPSIS} |
79766c36 | 353 | \if@dheadfirst\global\@dheadfirstfalse\else\relax\\*[\smallskipamount]\fi% |
e8511505 | 354 | \phantomsection% |
072f666e | 355 | {\let\protect\@empty\let\@uscore\relax% |
87883222 MW |
356 | \edef\temp@{\@desc@dispatch{desclabel}{#2}{#2}{#1}{#4}#3}% |
357 | \def\@uscore{_\@gobble}\expandafter\message\expandafter{\temp@}% | |
358 | \def\@uscore{-\@gobble}\expandafter\label\expandafter{\temp@}}% | |
ddfe4265 MW |
359 | {\begingroup\lccode`\~=`\_\lowercase{\endgroup\def~{_}}% |
360 | \protected@edef\@tempa##1{% | |
87883222 MW |
361 | \noexpand\index{\@desc@dispatch{descindex}{#2}{#2}{#1}{#4}#3##1}}% |
362 | \toks@\expandafter{\@tempa{|)}}% | |
363 | \toks\tw@\expandafter{\after@desc}% | |
364 | \xdef\after@desc{\the\toks\tw@\the\toks@}% | |
072f666e | 365 | \@tempa{|(}}% |
ac6e7a4e | 366 | \rlap{\hb@xt@\linewidth{\hfil\normalfont\bfseries |
072f666e | 367 | [\describecategoryname[#1]{#2}]}}% |
87883222 | 368 | #5% |
7e94c5fe MW |
369 | } |
370 | ||
371 | \def\desc@begin#1{% | |
ddfe4265 MW |
372 | \let\saved@after@desc\after@desc% |
373 | \gdef\after@desc{}% | |
1f7d590d | 374 | \normalfont% |
7e94c5fe MW |
375 | \if@nobreak\else\par\goodbreak\fi% |
376 | \global\@dheadfirsttrue% | |
377 | \begingroup% | |
7e94c5fe MW |
378 | \let\@endparenv\relax% |
379 | \clubpenalty\@M \widowpenalty\@M \interlinepenalty50% | |
ebf5ae2e | 380 | \@prog#1\endtabbing% |
7e94c5fe MW |
381 | \endgroup% |
382 | \penalty\@M\@afterheading% | |
383 | \list{}{\rightmargin\z@\topsep\z@}\item% | |
1f7d590d | 384 | } |
ddfe4265 | 385 | \def\desc@end{\endlist\after@desc\global\let\after@desc\saved@after@desc} |
7e94c5fe MW |
386 | |
387 | \@namedef{describe*}#1{\desc@begin{#1}} | |
388 | \expandafter\let\csname enddescribe*\endcsname\desc@end | |
389 | \def\describe{\parse@dhd\desc@} | |
87883222 | 390 | \def\desc@#1#2#3#4#5{\desc@begin{\dhead@{#1}{#2}{#3}{#4}{#5}}} |
7e94c5fe | 391 | \let\enddescribe\desc@end |
1f7d590d | 392 | |
ea214e5e MW |
393 | \def\descref{\@ifstar% |
394 | {\descref@i{}\@gobble{}}% | |
395 | {\descref@i{ (}{\noexpand\autopageref}{)}}} | |
e8d70b1b MW |
396 | \def\descref@i#1#2#3#4#5{\@ifnextchar@preserve[% |
397 | {\descref@ii{#1}{#2}{#3}{#4}{#5}}% | |
398 | {\descref@iii{#1}{#2}{#3}{#4}{#5}{}}} | |
399 | \def\descref@ii#1#2#3#4#5[#6]{\descref@iii{#1}{#2}{#3}{#4}{#5}{ #6}} | |
ea214e5e | 400 | \def\descref@iii#1#2#3#4#5#6{% |
5cf27cf1 MW |
401 | \begingroup% |
402 | \let\protect\@empty% | |
403 | \def\@uscore{-\@gobble}% | |
404 | \edef\@tempa##1{% | |
405 | \endgroup% | |
e8d70b1b | 406 | \noexpand\hyperref[#4:#5]% |
5cf27cf1 | 407 | ##1% |
e8d70b1b | 408 | #2{#4:#5}% |
5cf27cf1 | 409 | }% |
e8d70b1b | 410 | \@tempa{{\code{#5}}#6#1}#3% |
58f9b400 MW |
411 | } |
412 | ||
f1f17867 MW |
413 | %%%----- That's all, folks -------------------------------------------------- |
414 | \endinput |