%% %% This is file `ydoc-desc.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% ydoc.dtx (with options: `desc') %% %% %% Copyright (c) 2010-2011 by Martin Scharrer %% WWW: http://latex.scharrer-online.de/ %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 %% of this license or (at your option) any later version. %% The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3 or later is part of all distributions of LaTeX %% version 2005/12/01 or later. %% %% This work has the LPPL maintenance status `maintained'. %% %% The Current Maintainer of this work is Martin Scharrer. %% %% This work consists of the files ydoc.dtx and ydoc.ins %% and the derived file ydoc.cls, ydoc.sty, ydoc-code.sty, %% ydoc-expl.sty and ydoc-desc.sty. %% \NeedsTeXFormat{LaTeX2e}[1999/12/01] \RequirePackage{svn-prov}[2010/04/03] \ProvidesPackageSVN[ydoc-desc] {$Id: ydoc_desc_sty.dtx 2369 2011-03-20 00:04:45Z martin $} [v0.5alpha] [ydoc package to describe macros, environments, options etc.] \IfFileExists{needspace.sty}{% \RequirePackage{needspace} }{% \def\Needspace{\@ifstar\@gobble\@gobble} } \RequirePackage{shortvrb} \RequirePackage{etoolbox} \RequirePackage{xcolor} \definecolor{macrodesc}{rgb}{0,0.2,0.6} \definecolor{macroimpl}{rgb}{0,0.1,0.3} \definecolor{meta}{rgb}{0,0.25,0.75} \definecolor{scriptcolor}{rgb}{0.2,0.6,0.2} \definecolor{optioncolor}{rgb}{0.3.0.2,0} \colorlet{optional}{black!65!white} \colorlet{metaoptional}{optional!50!meta} \providecolor{urlcolor}{named}{blue} \providecolor{linkcolor}{named}{blue} \providecolor{filecolor}{named}{blue} \providecolor{citecolor}{named}{blue} \providecolor{anchorcolor}{named}{blue} \providecolor{menucolor}{named}{blue} \providecolor{runcolor}{named}{blue} \RequirePackage{hyperref} \hypersetup{% colorlinks=true, pdfborder=0 0 0, pdfborderstyle={}, urlcolor=urlcolor, linkcolor=linkcolor, filecolor=filecolor, citecolor=citecolor, anchorcolor=anchorcolor, menucolor=menucolor, runcolor=runcolor, } \newrobustcmd*\meta[1]{% {\metastyle{% \ensuremath\langle #1\/% \ensuremath\rangle }}% } \newrobustcmd*{\marg}[1]{% {\margstyle{% {\ttfamily\braceleft}% \meta{#1}% {\ttfamily\braceright}% }}% } \newrobustcmd*{\oarg}[1]{% {\oargstyle{% {\ttfamily[}% \meta{#1}% {\ttfamily]}% }}% } \newrobustcmd*{\parg}[1]{% {\pargstyle{% {\ttfamily(}% \meta{#1}% {\ttfamily)}% }}% } \newrobustcmd*{\aarg}[1]{% {\aargstyle{% {\ttfamily<}% \meta{#1}% {\ttfamily>}% }}% } \newrobustcmd*{\sarg}{{\sargstyle{*}}} \newrobustcmd*\pkg[1]{{\pkgstyle{#1}}} \newrobustcmd*\cls[1]{{\clsstyle{#1}}} \newrobustcmd*\lib[1]{{\libstyle{#1}}} \newrobustcmd*\env[1]{{\envstyle{#1}}} \newrobustcmd*\opt{\@ifstar\ys@opt\y@opt} \def\y@opt#1{{\optstyle{#1}}} \def\ys@opt#1{{\optstyle{#1}}\optpar{#1}} \newrobustcmd*\optpar[1]{\marginpar{\hbox to \marginparwidth{\hss\y@opt{#1}}}} \newrobustcmd*\file[1]{{\filestyle{#1}}} \newcommand*\pkgstyle[1]{\texttt{\textcolor{pkg}{#1}}} \newcommand*\clsstyle[1]{\texttt{\textcolor{cls}{#1}}} \newcommand*\libstyle[1]{\texttt{\textcolor{lib}{#1}}} \newcommand*\envstyle[1]{\texttt{\textcolor{env}{#1}}} \newcommand*\optstyle[1]{\textsf{\textcolor{opt}{#1}}} \newcommand*\filestyle[1]{\texttt{\textcolor{file}{#1}}} \colorlet{cls}{black} \colorlet{lib}{black} \colorlet{env}{black} \colorlet{file}{black} \colorlet{pkg}{black} \definecolor{opt}{rgb}{0.5,0.16666,0} \newrobustcmd*\cs[1]{\texttt{\textbackslash #1}} \newrobustcmd*\cmd[1]{\texttt{{\escapechar=92\string#1}}} \def\macrodescstyle{\ttfamily\bfseries\color{macrodesc}} \def\macroargsstyle{\ttfamily} \def\envcodestyle{\ttfamily} \def\verbstyle{\verbatim@font} \def\metastyle{\normalfont\itshape\color{meta}} \def\margstyle{} \protected\def\Optional{\optionalon\optional} \def\optionalstyle{\blendcolors*{!60!white}\color{black!75}} \def\optionalon{\protected\def\optional{\optionalstyle}} \def\optionaloff{\let\optional\relax} \optionalon \def\oargstyle{\optional} \def\pargstyle{} \def\aargstyle{} \def\sargstyle{\ttfamily\color{optional}} \newdimen\descindent \descindent=-\parindent \newdimen\beforedescskip \beforedescskip=\bigskipamount \newdimen\afterdescskip \afterdescskip=\medskipamount \newdimen\descsep \begingroup \ttfamily \global\descsep=1em\relax \endgroup \def\read@Macro@arg{% \futurelet\@let@token\handle@Macro@arg } \newcommand*\AlsoMacro{% \begingroup\makeatletter \AlsoMacro@ } \def\AlsoMacro@#1{% \endgroup \PrintMacroName{#1}% \read@Macro@arg } \begingroup \catcode`\|\active \gdef\ydoc@short@AlsoMacro{% \catcode`\|\active \let|\AlsoMacro } \endgroup \def\ydoc@macrocatcodes{% \ydoc@short@AlsoMacro \@makeother\'% \@makeother\!% \@makeother\[% \@makeother\]% \@makeother\(% \@makeother\)% } \def\handle@Macro@arg{% \expandafter\let\expandafter\handler\csname handle@Macro@token@\meaning\@let@token\endcsname \ifx\handler\relax \def\handler{\ifhmode\unskip\fi\end@Macro@args}% \fi \handler } \def\define@Macro@handler{% \begingroup \ydoc@macrocatcodes \define@Macro@handler@ } \def\define@Macro@handler@#1{% \endgroup \@namedef{handle@Macro@token@\meaning#1}% } \def\end@Macro@args{% \y@egroup \after@Macro@args } \def\after@Macro@args{% } \define@Macro@handler{\bgroup}{% \begingroup \afterassignment\read@Macro@marg@ \let\@let@token=% } \def\read@Macro@marg@{% \bgroup \margstyle{}% \let\end@Macro@args\empty% {\ttfamily\braceleft}% \aftergroup\read@Macro@marg@@ \read@Macro@arg } \def\read@Macro@marg@@{% {\ttfamily\braceright}% \endgroup \read@Macro@arg } \define@Macro@handler{[}[{% \begingroup \let\read@Macro@oarg@end\read@Macro@oarg@@end \let\end@Macro@args\read@Macro@oarg@end \oargstyle{}% {\ttfamily[}%] \read@Macro@arg } \define@Macro@handler{]}{% \read@Macro@oarg@end } \def\read@Macro@oarg@@end#1]{% #1% {\ttfamily]}% \endgroup \read@Macro@arg } \def\read@Macro@oarg@end{\end@Macro@args} \let\read@Macro@aarg@end\read@Macro@oarg@end \let\read@Macro@parg@end\read@Macro@oarg@end \define@Macro@handler{(}({% \begingroup \let\read@Macro@parg@end\read@Macro@parg@@end \let\end@Macro@args\read@Macro@parg@end \pargstyle{}% {\ttfamily(}%) \read@Macro@arg } \define@Macro@handler{)}{% \read@Macro@parg@end } \def\read@Macro@parg@@end#1){% #1% {\ttfamily)}% \endgroup \read@Macro@arg } \def\read@Macro@aarg<{% \begingroup \let\read@Macro@aarg@end\read@Macro@aarg@@end \let\end@Macro@args\read@Macro@aarg@end \aargstyle{}% {\ttfamily<}% \read@Macro@arg } \define@Macro@handler{>}{% \read@Macro@aarg@end } \def\read@Macro@aarg@@end#1>>{% #1% {\ttfamily>}% \endgroup \read@Macro@arg } \define@Macro@handler{<}<{% \futurelet\@let@token\read@Macro@angle@ } \def\read@Macro@angle@{% \ifx\@let@token<% \expandafter\read@Macro@aarg \else \expandafter\read@Macro@meta \fi } \def\read@Macro@meta#1>{% \meta{#1}\read@Macro@arg } \define@Macro@handler**{% \sarg\read@Macro@arg } \define@Macro@handler{'}'{% \begingroup \let\do\@makeother \dospecials \@noligs \@makeother\'% \obeyspaces \read@Macro@verb@ } \begingroup \@makeother\'% \gdef\read@Macro@verb@#1'{% \endgroup \ifx\relax#1\relax {\verbstyle{\string'}}% \else {% \frenchspacing \@noligs\verbstyle{#1}}% \fi \read@Macro@arg } \endgroup \define@Macro@handler!!#1!{% #1\relax \read@Macro@arg } \define@Macro@handler{\@sptoken} {% \read@Macro@arg } \define@Macro@handler{~}#1{% #1\read@Macro@arg } \AtBeginDocument{% \define@Macro@handler{~}#1{% #1\read@Macro@arg } } \define@Macro@handler{\space}#1{% #1\read@Macro@arg } \@ifundefined{DescribeMacro}{}{% \PackageInfo{ydoc-desc}{Redefining \string\DescribeMacro}{}% } \def\DescribeMacro{% \DescribeMacros \let\DescribeMacros\y@egroup \optionalon \def\after@Macro@args{\endDescribeMacros}% \begingroup\makeatletter \Describe@Macro } \def\DescribeScript#1{% \DescribeMacros \let\DescribeMacros\y@egroup \optionalon \def\after@Macro@args{\endDescribeMacros}% \hbox\y@bgroup \texttt{#1}% \ydoc@macrocatcodes \macroargsstyle \read@Macro@arg~% } \def\Describe@Macro#1{% \endgroup \edef\name{\expandafter\@gobble\string#1}% \global\@namedef{href@desc@\name}{}% \immediate\write\@mainaux{% \global\noexpand\@namedef{href@desc@\name}{}% }% \hbox\y@bgroup \@ifundefined{href@impl@\name}{}{\hyperlink{impl:\name}}% {% \hbox{\vbox to 0pt{\vss\hbox{\raisebox{4ex}{\hypertarget{desc:\name}{}}}}% \PrintMacroName{#1}}% }% \ydoc@macrocatcodes \macroargsstyle \read@Macro@arg } \newcommand*\MakeShortMacroArgs{% \@ifstar {\@MakeShortMacroArgs\Macro}% {\@MakeShortMacroArgs\MacroArgs}% } \def\@MakeShortMacroArgs#1#2{% \MakeShortVerb{#2} \catcode`#2\active \begingroup \catcode`\~\active \lccode`\~`#2\relax \lowercase{\endgroup\gdef~{\bgroup\let~\egroup#1}}% } \newcommand*\DeleteShortMacroArgs[1]{% \DeleteShortVerb{#1}% } \newcommand*\Macro{\MacroArgs\AlsoMacro} \def\@Macro{% \begingroup\makeatletter \Describe@Macro } \define@Macro@handler\AlsoMacro{} \define@Macro@handler\DescribeMacro{} \newcommand*\MacroArgs{% \begingroup \def\end@Macro@args{\endgroup\xspace}% \ydoc@macrocatcodes \macroargsstyle \read@Macro@arg } \RequirePackage{xspace} \def\DescribeMacros{% \begingroup \let\Macro\@Macro \parindent=0pt\relax \setbox\descbox\vbox\y@bgroup } \def\endDescribeMacros{% \y@egroup \PrintMacros \endgroup } \def\DescribeMacrosTabcolsep{\tabcolsep} \def\DescribeMacrosTab{% \DescribeMacros \hbox\y@bgroup \tabcolsep=\DescribeMacrosTabcolsep\relax \DescribeMacrosTab@ } \def\DescribeMacrosTab@#1{\tabular{@{}#1@{}}} \def\endDescribeMacrosTab{% \endtabular\y@egroup \endDescribeMacros } \newcommand*\DescribeLength{% \begingroup \let\DescribeLength\Describe@Length \setbox\descbox\hbox\y@bgroup \tabular{@{}l@{\hspace{2em}}l@{}}% \Describe@Length } \newcommand*\Describe@Length[2]{% \PrintLengthName{#1}& (Default: {\macroargsstyle#2\unskip})% \@ifnextchar\DescribeLength {\\}% {% \endtabular \y@egroup \PrintLength \endgroup }% } \@ifundefined{DescribeEnv}{}{% \PackageInfo{ydoc-desc}{Redefining \string\DescribeEnv}{}% } \let\DescribeEnv\relax \newcommand*\DescribeEnv[2][]{% \begingroup \def\DescribeEnv@name{#2}% \let\\\DescribeEnv@newline \ifx\@currenvir\DescribeEnv@string \def\after@Macro@args{% \let\after@Macro@args\empty \setbox\@tempboxa\hbox\y@bgroup \@ifnextchar\end{}% {\DescribeEnv@newline}% #1% }% \else \ifx\relax#1\relax \def\after@Macro@args{% \y@bgroup \endDescribeEnv }% \else \def\after@Macro@args{% \setbox\@tempboxa\hbox\y@bgroup \DescribeEnv@newline\MacroArgs#1% \endDescribeEnv }% \fi \fi \setbox\descbox\vbox\y@bgroup \envcodestyle \let\PrintEnv\PrintSubEnv \hbox\y@bgroup \PrintEnvName{\begin}{\DescribeEnv@name}% \ydoc@macrocatcodes \macroargsstyle \read@Macro@arg } \newcommand*\DescribeEnv@newline[1][0pt]{% \strut\y@egroup {\vskip#1}% \hbox\y@bgroup\strut \hspace*{\descsep}% \ignorespaces }% \def\DescribeEnv@string{DescribeEnv} \newbox\descbox \def\endDescribeEnv{% \y@egroup \begingroup \setbox\@tempboxa\lastbox \ifcase0% \ifdim\wd\@tempboxa>\descsep1\fi \ifdim\ht\@tempboxa>\ht\strutbox1\fi \ifdim\dp\@tempboxa>\dp\strutbox1\fi \else \box\@tempboxa \fi \endgroup \hbox\y@bgroup \PrintEnvName{\end}{\DescribeEnv@name} \y@egroup \y@egroup \PrintEnv \endgroup } \def\PrintMacroName#1{% {\macrodescstyle{\strut \texttt{\char92}% \escapechar\m@ne \string#1\strut}}% } \let\PrintLengthName\PrintMacroName \def\PrintEnvName#1#2{% \strut \string#1\braceleft {\macrodescstyle#2\strut}% \braceright } \def\PrintMacros{% \par\vspace\beforedescskip \begingroup \sbox\@tempboxa{\descframe{\usebox{\descbox}}}% \Needspace*{\dimexpr\ht\@tempboxa+2\baselineskip\relax}% \par\noindent \ifdim\wd\@tempboxa>\dimexpr\linewidth-2\descindent\relax \makebox[\linewidth][c]{\usebox\@tempboxa}% \else \hspace*{\descindent}% \usebox\@tempboxa \fi \endgroup \par \vspace\afterdescskip \par\noindent } \def\descframe#1{% \fbox{\hspace*{\descsep}#1\hspace*{\descsep}}% } \let\PrintLength\PrintMacros \let\PrintEnv\PrintMacros \def\PrintSubEnv{% \hbox{\hbox{\usebox{\descbox}}}% } {% \@firstofone{% \catcode`\\=12 \gdef\bslash }{\} }%} \begingroup \catcode`\%=12 \gdef\percent{%} \endgroup \begingroup \catcode`\<=1 \catcode`\>=2 \catcode`\{=12 \catcode`\}=12 \gdef\braceleft <{> \gdef\braceright<}> \endgroup \def\y@bgroup{\bgroup\color@setgroup} \def\y@egroup{\color@endgroup\egroup} \newcommand*{\codeline}[1][c]{% \codelinebefore \hbox to \hsize\bgroup \ifx i#1\hspace*{\leftmargin}\else \ifx l#1\else\hss\fi \fi \let\xspace\relax \hbox\bgroup \aftergroup\codeline@end \aftergroup#1% \afterassignment\MacroArgs \let\@let@token=% } \def\codeline@end#1{% \ifx r#1\else\hss\fi \egroup \codelineafter } \newcommand*\codelinebefore{\par\smallskip\noindent} \newcommand*\codelineafter {\par\smallskip\noindent} \newenvironment{codequote}{% \def\\{\newline\relax\MacroArgs}% \par\smallskip\bgroup\leftskip=\leftmargin\rightskip=\rightmargin\noindent\MacroArgs} {\par\egroup\smallskip\noindent\ignorespacesafterend} \newenvironment{macroquote}{% \def\\{\newline\relax\Macro}% \par\smallskip\bgroup\leftskip=\leftmargin\rightskip=\rightmargin\noindent\Macro} {\par\egroup\smallskip\noindent\ignorespacesafterend} \endinput %% %% End of file `ydoc-desc.sty'.