%% More reference types.
\defxref{p}{part}
+\def\instead#1#2{#1}
+
%% Other languages with special typesetting.
\def\Cplusplus{C\kern-\p@++}
\def\Csharp{C\#}
\def\describecategoryname{\@ifnextchar[\@descname@i{\@descname@i[]}}
\def\@descname@i[#1]#2{%
\expandafter\let\expandafter\@tempa\csname cat!#2\endcsname%
- \expandafter\let\expandafter\@tempb\csname descmod/#1\endcsname%
+ \expandafter\let\expandafter\@tempb\csname modcat/#1\endcsname%
\ifx\@tempa\relax\@tempb{#2}\else\@tempa\@tempb\fi}
-\def\@maybe@modlabel#1#2{\if!#1!\else#1/\fi#2}
+\def\@mod@dispatch#1#2{\csname #1/#2\endcsname}
+\def\@desc@dispatch#1#2{%
+ \csname #1/%
+ \expandafter\ifx\csname catsw!#2\endcsname\relax plain%
+ \else \csname catsw!#2\endcsname \fi%
+ \endcsname%
+}
\definedescribecategory{sym}{symbol}
\definedescribecategory{fun}{#1{function}}
\definedescribecategory{plug}{pluggable parser}
\def\nlret{\\\hspace{4em}\returns}
-\@namedef{descmod/}#1{#1}
+\@namedef{modcat/}#1{#1}
+\@namedef{modlabel/}#1{#1}
+\@namedef{modindex/}#1{#1@\noexpand\code{#1}}
+
+\@namedef{modcat/setf}#1{\code{setf}-#1}
+\@namedef{modlabel/setf}#1{setf/#1}
+\@namedef{modindex/setf}#1{#1@\noexpand\code{#1}}
+
+\@namedef{modcat/muffs}#1{#1}
+\@namedef{modlabel/muffs}#1{*#1*}
+\@namedef{modindex/muffs}#1{#1@\noexpand\code{*#1*}}
-\@namedef{descmod/setf}#1{\code{setf}-#1}
+\@namedef{modcat/kwd}#1{#1}
+\@namedef{modlabel/kwd}#1{:#1}
+\@namedef{modindex/kwd}#1{#1@\noexpand\code{:#1}}
\@namedef{descargs/plain}#1{#1{}}
-\@namedef{desclabel/plain}#1#2#3{#1:\@maybe@modlabel{#2}{#3}}
+\@namedef{desclabel/plain}#1#2#3{#1:\@mod@dispatch{modlabel}{#2}{#3}}
\@namedef{descindex/plain}#1#2#3{%
- #3@\noexpand\code{#3}!%
+ \@mod@dispatch{modindex}{#2}{#3}!%
\protect\describecategoryname[#2]{#1}%
}
\@namedef{descargs/method}#1#2{#1{{#2}}}
-\@namedef{desclabel/method}#1#2#3#4{#1:\@maybe@modlabel{#2}{#3}(#4)}
+\@namedef{desclabel/method}#1#2#3#4%
+ {#1:\@mod@dispatch{modlabel}{#2}{#3}(#4)}
\@namedef{descindex/method}#1#2#3#4{%
- #3@\noexpand\code{#3}!%
+ \@mod@dispatch{modindex}{#2}{#3}!%
\protect\describecategoryname[#2]{#1}%
\protect\fmtspecs{ specialized at }{#4}%
}
-\def\@desc@dispatch#1#2{%
- \csname #1/%
- \expandafter\ifx\csname catsw!#2\endcsname\relax plain%
- \else \csname catsw!#2\endcsname \fi%
- \endcsname%
-}
-
\def\q@{\q@}
\def\@setf{setf}
\fi%
}
-%% \parse@dhd{NEXT}{CAT}{...}...[NAME]{SYNOPSIS}
+%% \parse@dhd{NEXT}[MOD]{CAT}{...}...[NAME]{SYNOPSIS}
%% call NEXT{MOD}{CAT}{{...}...}{NAME}{SYNOPSIS}
%% #1 #2 #3 #4 #5
-\def\parse@dhd#1#2{% {NEXT}{CAT}
+\def\@setf{setf}
+\def\@starstar{**}
+\def\parse@dhd#1{% {NEXT}
+ \@ifnextchar[{\parse@dhd@a{#1}}{\parse@dhd@c{#1}}}
+\def\parse@dhd@a#1[#2]#3{% {NEXT}[MOD]{CAT}
+ \@desc@dispatch{descargs}{#3}{\parse@dhd@ab{#1}{#2}{#3}}}
+\def\parse@dhd@ab#1#2#3#4{% {NEXT}{MOD}{CAT}{{...}...}
+ \@ifnextchar[{\parse@dhd@ac{#1}{#2}{#3}{#4}}{\parse@dhd@ad{#1}{#2}{#3}{#4}}}
+\def\parse@dhd@ac#1#2#3#4[#5]#6{% {NEXT}{MOD}{CAT}{{...}...}[NAME]{SYNOPSIS}
+ #1{#2}{#3}{#4}{#5}{#6}}
+\def\parse@dhd@ad#1#2#3#4#5{% {NEXT}{MOD}{CAT}{{...}...}{NAME [ARGS...]}
+ \parse@dhd@ae{#1}{#2}{#3}{#4}{#5}#5 \q@}
+\def\parse@dhd@ae#1#2#3#4#5#6 #7\q@{%
+ % {NEXT}{MOD}{CAT}{{...}...}{SYNSOPSIS}NAME [ARGS...]\q@
+ #1{#2}{#3}{#4}{#6}{#5}}
+
+\def\parse@dhd@c#1#2{% {NEXT}{CAT}
\@desc@dispatch{descargs}{#2}{\parse@dhd@cb{#1}{#2}}}
\def\parse@dhd@cb#1#2#3{% {NEXT}{CAT}{{...}...}
\@ifnextchar[{\parse@dhd@cc{#1}{#2}{#3}}{\parse@dhd@cd{#1}{#2}{#3}}}
% {NEXT}{CAT}{{...}...}{SYNOPSIS}NAME [ARGS...]\q@
\def\temp@{#5}%
\ifx\@setf\temp@\def\next@{\parse@dhd@csetf{#1}{#2}{#3}{#4}#6 \q@}%
- \else\def\next@{#1{}{#2}{#3}{#5}{#4}}\fi%
+ \else\def\temp@##1##2*##3\q@{\def\temp@{##1##3}}\temp@#5*\q@%
+ \ifx\temp@\@starstar\def\next@{\parse@dhd@cmuffs{#1}{#2}{#3}{#4}#5}%
+ \else\def\temp@##1##2\q@{\def\temp@{##1}}\temp@#5\q@%
+ \if:\temp@\def\next@{\parse@dhd@ckwd{#1}{#2}{#3}{#4}#5\q@}%
+ \else\def\next@{#1{}{#2}{#3}{#5}{#4}}\fi\fi\fi%
\next@%
}
\def\parse@dhd@csetf#1#2#3#4(#5 #6\q@{%
% {NEXT}{CAT}{{...}...}{SYNOPSIS}(NAME [ARGS...])\q@
#1{setf}{#2}{#3}{#5}{#4}}
+\def\parse@dhd@cmuffs#1#2#3#4*#5*{%
+ % {NEXT}{CAT}{{...}...}{SYNOPSIS}*NAME*
+ #1{muffs}{#2}{#3}{#5}{#4}}
+\def\parse@dhd@ckwd#1#2#3#4:#5\q@{%
+ % {NEXT}{CAT}{{...}...}{SYNOPSIS}:NAME\q@
+ #1{kwd}{#2}{#3}{#5}{#4}}
\newif\if@dheadfirst
\def\dhead{\parse@dhd\dhead@}
\def\dhead@#1#2#3#4#5{% {MOD}{CAT}{{...}...}{NAME}{SYNOPSIS}
- \if@dheadfirst\global\@dheadfirstfalse\else\relax\\[\smallskipamount]\fi%
+ \if@dheadfirst\global\@dheadfirstfalse\else\relax\\*[\smallskipamount]\fi%
+ \phantomsection%
{\let\protect\@empty\let\@uscore\relax%
\edef\temp@{\@desc@dispatch{desclabel}{#2}{#2}{#1}{#4}#3}%
\def\@uscore{_\@gobble}\expandafter\message\expandafter{\temp@}%
\def\descref#1{\@ifnextchar[{\descref@i{#1}}{\descref@ii{#1}{}}}
\def\descref@i#1[#2]{\descref@ii{#1}{ #2}}
\def\descref@ii#1#2#3{%
- \code{#1}#2 (page~%
- {\let\protect\@empty%
- \def\@uscore{-\@gobble}\edef\@tempa{\noexpand\pageref{#3:#1}}\@tempa}%
- )%
+ \begingroup%
+ \let\protect\@empty%
+ \def\@uscore{-\@gobble}%
+ \edef\@tempa##1{%
+ \endgroup%
+ \noexpand\hyperref[#3:#1]%
+ ##1%
+ \noexpand\autopageref{#3:#1}%
+ }%
+ \@tempa{{\code{#1}}#2 (})%
}
%%%----- That's all, folks --------------------------------------------------