diff options
author | Karl Berry <karl@freefriends.org> | 2022-12-07 21:11:10 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-12-07 21:11:10 +0000 |
commit | 6395694a7d4a188bbc2c7edbd29a74ff42020f49 (patch) | |
tree | 71f030a0025f544f197a0456c95e0dad42a28e40 /Master/texmf-dist/tex | |
parent | bde4636a8d180976630426405be28fc9e51aba9f (diff) |
dtxdescribe (7dec22)
git-svn-id: svn://tug.org/texlive/trunk@65219 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/dtxdescribe/dtxdescribe.sty | 506 |
1 files changed, 489 insertions, 17 deletions
diff --git a/Master/texmf-dist/tex/latex/dtxdescribe/dtxdescribe.sty b/Master/texmf-dist/tex/latex/dtxdescribe/dtxdescribe.sty index 60872285f13..fdddabae15a 100644 --- a/Master/texmf-dist/tex/latex/dtxdescribe/dtxdescribe.sty +++ b/Master/texmf-dist/tex/latex/dtxdescribe/dtxdescribe.sty @@ -18,7 +18,8 @@ \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{dtxdescribe} - [2022/09/08 v1.05 Describe additional object types in source files.] + [2022/12/07 v1.06 Describe additional object types in source files.] + @@ -178,8 +179,8 @@ \def\LOF{LOF}% \def\LOT{LOT}% } - } - { + }% yes hyperref + {% no hyperref \newcommand*{\hyperpage}[1]{#1} } } @@ -190,6 +191,7 @@ \RequirePackage{pict2e} \setlength{\unitlength}{1pt} + \newcommand*{\warningsign}{% \begin{picture}(10,9) \put(4,1){\scriptsize!} @@ -199,6 +201,55 @@ \end{picture} } + +\begingroup +\catcode`\|=0 +\catcode`\\=12 +|gdef|DTXD@backslash{\} +|endgroup + +\@ifpackageloaded{doc}{ +\@ifpackageloaded{hypdoc}{ +\AddToHook{begindocument/before}[doc/hyperref]{% + \ifdoc@hyperref + \else + \def\hdclindex#1#2{% + \ifx\@nil#2\@nil\else\csname #2\expandafter\endcsname\fi% + }% + \fi +} +}{}% hypdoc loaded +}{}% doc loaded + +\AtBeginDocument{ +\@ifpackageloaded{hypdoc}{ +\@ifpackageloaded{splitidx}{ +\renewcommand*{\@wrsindex}[2][]{% + \ifx\relax#1\relax + \if@splitidx + \@wrsindex[idx]{#2}% + \else + \def\@tempa{#2}% + \if@verbindex\@onelevel@sanitize\@tempa\fi + \@wrindex{\@tempa}% + \fi + \else + \def\@tempa{#2\encapchar hdpindex{}}% dtxdescribe + \csname index@#1@hook\endcsname + \expandafter\ifx\csname @@wrsindex\endcsname\relax + \@@@wrsindex{#1}{{\@tempa}{\thepage}}% + \else + \def\@tempb{\@@wrsindex{#1}}% + \expandafter\@tempb\@tempa||\\% + \fi + \endgroup + \@esphack + \fi +} +}{}% splitidx loaded +}{}% hypdoc loaded +}% AtBeginDocument + \@ifpackageloaded{doc}{ \newcommand*{\DTXD@gobble}{2} }{ @@ -269,8 +320,8 @@ }\ensuremath\rangle } \def\meta@font@select{\itshape} - } -} + }% doc loaded +}% AtBeginDocument \providecommand*{\PrintEnvName}{} @@ -280,9 +331,13 @@ \newcommand*{\DTXD@printtype}[1] {\raggedleft\strut{\scriptsize\sffamily#1}\quad\MacroFont} +\IfPackageLoadedTF{doc}{}{% not doc package + \providecommand{\usage}{} \renewcommand{\usage}[1]{\textit{\hyperpage{#1}}} +}% not doc package + \let\DTXD@origwrindex\@wrindex \newcommand*{\DTXD@margintag}[3]{% @@ -308,12 +363,12 @@ \DTXD@origwrindex{% #2\actualchar{\protect\ttfamily#2} % name (#4)% index tag -\ifblank{#1}{}{ [#1]}% class +\ifblank{#1}{}{ [#1]}% \encapchar #5}% \begingroup% \DTXD@origwrindex{% #4:\levelchar% index tag -\ifblank{#1}{}{[#1]:\levelchar}% class +\ifblank{#1}{}{[#1]:\levelchar}% #2\actualchar{\protect\ttfamily#2}% name \encapchar #5}% \ifblank{#1}{}{% class given @@ -373,6 +428,211 @@ } +\ExplSyntaxOn +\IfPackageLoadedTF{doc}{ + +\newcommand*{\DTXD@category}{} + +\keys_define:nn {doc} +{ + c .cs_set:Np = \DTXD@category, + unknown .code:n = {% + \renewcommand*{\DTXD@category}{\l_keys_key_str}% + }, +} + +}{}% doc loaded +\ExplSyntaxOff + + +\def\@doc@describe#1#2{% dtxdescribe + \ifdoc@noprint\else + \@ifundefined{@captype}{% not float? dtxdescribe + \marginpar{\raggedleft + \strut + \doc@providetarget + \@nameuse{PrintDescribe#1}{#2}% + \ifdefvoid{\DTXD@category}{}{% dtxdescribe + \space{\footnotesize[\mbox{\DTXD@category}]}% + }% + } + }{}% + \fi + \ifdoc@noindex\else + \@nameuse{Special#1Index}{#2}% + \fi + \@esphack + \endgroup + \ignorespaces} + + +\AtBeginDocument{ +\def\HD@guesstoclevel#1{1} +} + +\IfPackageLoadedTF{doc}{% + +\def\@NewDocElement#1#2#3{% + \doc@macrolikefalse + \doc@topleveltrue + \def\doc@idxtype{#3}% + \def\doc@idxgroup{#3s}% + \let\doc@printtype\@empty + \csname keys_set:nn\endcsname{doc}{#1}% + \ifx\doc@printtype\@empty + \@temptokena{}% + \else + \@temptokena\expandafter{\expandafter + \textnormal\expandafter{\expandafter + \space\expandafter + (\doc@printtype)}}% + \fi + \@nameedef{Print#2Name}##1{% + {\noexpand\MacroFont + \ifdoc@macrolike + \noexpand\string##1% dtxdescribe + \else + \noexpand\detokenize\expandafter{##1}% dtxdescribe + \fi + \the\@temptokena + }}% + \expandafter\let\csname PrintDescribe#2\expandafter\endcsname + \csname Print#2Name\endcsname + \edef\doc@expr{% + \ifdoc@macrolike + \noexpand\doc@createspecialmacrolikeindexes + \else + \noexpand\doc@createspecialindexes + \fi + {#2}% + }% + \expandafter\expandafter\expandafter + \doc@expr + \expandafter\expandafter\expandafter + {\expandafter\doc@idxtype\expandafter}\expandafter + {\doc@idxgroup}% + \doc@createdescribe{#2}% + \ifdoc@macrolike + \doc@createenv{TT}{#2}{#3}% + \else + \doc@createenv{TF}{#2}{#3}% + \fi +} + +\newcommand*{\DTXD@maybecategory}{% + \ifdefvoid{\DTXD@category}% + {}% + {\space[% + \string\verb% + \verbatimchar\DTXD@category\verbatimchar% + ]}% +} + +\newcommand*{\DTXD@macrotocsname}[1]{% + \ifcat\relax\noexpand#1% + \expandafter\expandafter\expandafter\@gobble\expandafter\string + \fi + #1% +} + +\newcommand*{\DTXD@categorylevelname} + +\newcommand*{\DTXD@maybecategorylevel}[1]{% + \ifdefvoid{\DTXD@categorylevelname}% + {} + {% + \index{% + \DTXD@categorylevelname% + \noexpand\actualchar% + \string\verb*% % + \noexpand\verbatimchar + [\DTXD@category]:% + \verbatimchar% + \noexpand\levelchar% +\@gtempa\noexpand\actualchar% +\string\verb% % to fool emacs highlighting +\noexpand\quotechar% +\noexpand\verbatimchar% +\@gtempa\noexpand\verbatimchar% + \ifx\@nil#1\@nil\else \the\@temptokena \fi + \noexpand\doc@handleencap{usage} + }% + }% +} + +\newcommand*{\DTXD@findcategorylevelname}{% + \edef\DTXD@categorylevelname{\DTXD@category}% + \edef\DTXD@categorylevelname{\detokenize\expandafter{\DTXD@categorylevelname}}% + \IfBeginWith{\DTXD@categorylevelname}{\DTXD@backslash} + {\StrGobbleLeft{\DTXD@categorylevelname}{1}[\DTXD@categorylevelname]} + {} +} + +\def\doc@createspecialindexes#1#2#3{% + \@temptokena{\space (#2)}% + \@temptokenb{#3:}% + \@nameedef{SpecialMain#1Index}##1{% + \noexpand\@SpecialIndexHelper@##1\noexpand\@nil% dtxdescribe + \noexpand\@bsphack + \noexpand\DTXD@findcategorylevelname% dtxdescribe + \ifdoc@toplevel + \noexpand\special@index{\noexpand\@gtempa\noexpand\actualchar% +\string\verb% % to fool emacs highlighting% dtxdescribe +\noexpand\quotechar% +\noexpand\verbatimchar% dtxdescribe +\noexpand\@gtempa\noexpand\verbatimchar% dtxdescribe + \ifx\@nil#2\@nil\else \the\@temptokena \fi + \noexpand\DTXD@maybecategory% dtxdescribe + \noexpand\encapchar main}% + \noexpand\DTXD@maybecategorylevel{#2}% dtxdescribe + \fi + \ifx\@nil#3\@nil\else + \noexpand\special@index{\the\@temptokenb\noexpand\levelchar% +\noexpand\@gtempa\noexpand\actualchar% dtxdescribe +\string\verb% % to fool emacs highlighting% dtxdescribe +\noexpand\quotechar% +\noexpand\verbatimchar% dtxdescribe +\noexpand\@gtempa\noexpand\verbatimchar% dtxdescribe + \noexpand\DTXD@maybecategory% dtxdescribe + \noexpand\encapchar main}% + \noexpand\DTXD@maybecategorylevel{#2}% dtxdescribe + \fi + \noexpand\@esphack}% + \@nameedef{Special#1Index}##1{% + \noexpand\@SpecialIndexHelper@##1\noexpand\@nil% dtxdescribe + \noexpand\@bsphack + \noexpand\DTXD@findcategorylevelname% dtxdescribe + \ifdoc@toplevel + \noexpand\doc@providetarget + \noexpand\index{\noexpand\@gtempa\noexpand\actualchar% dtxdescribe +\string\verb% % to fool emacs highlighting% dtxdescribe +\noexpand\quotechar% +\noexpand\verbatimchar% dtxdescribe +\noexpand\@gtempa\noexpand\verbatimchar% dtxdescribe + \ifx\@nil#2\@nil\else \the\@temptokena \fi + \noexpand\DTXD@maybecategory% dtxdescribe + \noexpand\doc@handleencap{usage}}% + \noexpand\DTXD@maybecategorylevel{#2}% dtxdescribe + \fi + \ifx\@nil#3\@nil\else + \noexpand\index{\the\@temptokenb\noexpand\levelchar% +\noexpand\@gtempa\noexpand\actualchar% dtxdescribe +\string\verb% % to fool emacs highlighting% dtxdescribe +\noexpand\quotechar +\noexpand\verbatimchar% dtxdescribe +\noexpand\@gtempa\noexpand\verbatimchar% dtxdescribe + \noexpand\DTXD@maybecategory% dtxdescribe + \noexpand\doc@handleencap{usage}}% + \noexpand\DTXD@maybecategorylevel{#2}% dtxdescribe + \fi + \noexpand\@esphack}} + +}{}% doc loaded + + +\IfPackageLoadedTF{doc}{ +}{% not doc + \providecommand*{\DescribeMacro}{} \renewcommand*{\DescribeMacro}[2][]{% \@bsphack% @@ -407,17 +667,22 @@ \ignorespaces% } +}% not doc + +\IfPackageLoadedTF{doc}{}{% not doc + \providecommand*{\DescribeEnv}{} \renewcommand*{\DescribeEnv}[2][] {\DTXD@margintagindex{#1}{#2}{Env}{environment}{usage}} +}% not doc + \newcommand*{\DTXD@filename}{} \newcommand*{\DTXD@filemarginparindex}[5]{% \renewcommand{\DTXD@filename}{\detokenize{#2}}% -\StrSubstitute{\DTXD@filename}% -{\detokenize{_}}{\detokenize{\_}}[\DTXD@filename]% +\StrSubstitute{\DTXD@filename}{\detokenize{_}}{\detokenize{\_}}[\DTXD@filename]% \DTXD@margintag{#1}{#2}{#3}% \DTXD@index{#1}{\DTXD@filename}{#3}{#4}{#5}% \endgroup% @@ -426,51 +691,232 @@ \newcommand*{\DTXD@DescribeFile}[2][]{% \DTXD@filemarginparindex{#1}{#2}{File}{file}{usage}% } +\IfPackageLoadedTF{doc}{% doc + +\NewDocElement[ + macrolike=false, + toplevel=false, + idxtype=file, + idxgroup=Files, + printtype=\textit{file} +]{File}{file} + +}{% not doc + \newcommand*{\DescribeFile}{% -\begingroup\catcode`\_=12 \DTXD@DescribeFile% + \begingroup\catcode`\_=12 \DTXD@DescribeFile% } + +}% not doc \newcommand*{\DTXD@DescribeProgram}[2][]{% \DTXD@filemarginparindex{#1}{#2}{Prog}{program}{usage}% } +\IfPackageLoadedTF{doc}{% doc + +\NewDocElement[ + macrolike=false, + toplevel=false, + idxtype=program, + idxgroup=Programs, + printtype=\textit{Prog} +]{Program}{program} + +}{% not doc + \newcommand*{\DescribeProgram}{% \begingroup\catcode`\_=12 \DTXD@DescribeProgram% } +}% not doc + \newcommand*{\DTXD@DescribeCommand}[2][]{% \DTXD@filemarginparindex{#1}{#2}{Cmd}{command}{usage}% } +\IfPackageLoadedTF{doc}{% doc + +\NewDocElement[ + macrolike=false, + toplevel=false, + idxtype=command, + idxgroup=Commands, + printtype=\textit{Cmd} +]{Command}{command} + +}{% not doc + \newcommand*{\DescribeCommand}{% \begingroup\catcode`\_=12 \DTXD@DescribeCommand% } +}% not doc + \newcommand*{\DTXD@DescribePackage}[2][]{% \DTXD@filemarginparindex{#1}{#2}{Pkg}{package}{usage}% } +\IfPackageLoadedTF{doc}{% doc + +\NewDocElement[ + macrolike=false, + toplevel=false, + idxtype=package, + idxgroup=Packages, + printtype=\textit{Pkg} +]{Package}{package} + +}{% not doc + \newcommand*{\DescribePackage}{% \begingroup\catcode`\_=12 \DTXD@DescribePackage% } +}% not doc + + \newcommand*{\DTXD@DescribeClass}[2][]{% \DTXD@filemarginparindex{#1}{#2}{Cls}{class}{usage}% } +\IfPackageLoadedTF{doc}{% doc + +\NewDocElement[ + macrolike=false, + toplevel=false, + idxtype=class, + idxgroup=Classes, + printtype=\textit{Cls} +]{Class}{class} + +}{% not doc + \newcommand*{\DescribeClass}{% \begingroup\catcode`\_=12 \DTXD@DescribeClass% } +}% not doc + +\IfPackageLoadedTF{doc}{% doc + +\NewDocElement[ + macrolike=false, + toplevel=false, + idxtype=option, + idxgroup=Options, + printtype=\textit{Opt} +]{Option}{option} + +}{% not doc + \newcommand*{\DescribeOption}[2][] {\DTXD@margintagindex{#1}{#2}{Opt}{option}{usage}} + +}% not doc +\IfPackageLoadedTF{doc}{% doc + +\NewDocElement[ + macrolike=false, + toplevel=false, + idxtype=argument, + idxgroup=Arguments, + printtype=\textit{Arg} +]{Argument}{argument} + +}{% not doc + \newcommand*{\DescribeArgument}[2][] {\DTXD@margintagindex{#1}{#2}{Arg}{argument}{usage}} + +}% not doc +\IfPackageLoadedTF{doc}{% doc + +\NewDocElement[ + macrolike=false, + toplevel=false, + idxtype=boolean, + idxgroup=Booleans, + printtype=\textit{bool} +]{Boolean}{boolenv} + +}{% not doc + \newcommand*{\DescribeBoolean}[2][] {\DTXD@margintagindex{#1}{#2}{Bool}{boolean}{usage}} + +}% not doc +\IfPackageLoadedTF{doc}{% doc + +\NewDocElement[ + macrolike=true, + toplevel=false, + idxtype=length, + idxgroup=Lengths, + printtype=\textit{Len} +]{Length}{length} + +}{% not doc + \newcommand*{\DescribeLength}[2][] {\DTXD@cmdmargintagindex{#1}{#2}{Len}{length}{usage}} + +}% not doc +\IfPackageLoadedTF{doc}{% doc + +\NewDocElement[ + macrolike=false, + toplevel=false, + idxtype=counter, + idxgroup=Counters, + printtype=\textit{Ctr} +]{Counter}{counter} + +}{% not doc + \newcommand*{\DescribeCounter}[2][] {\DTXD@margintagindex{#1}{#2}{Ctr}{counter}{usage}} + +}% not doc +\IfPackageLoadedTF{doc}{% doc + +\NewDocElement[ + macrolike=false, + toplevel=false, + idxtype=hook, + idxgroup=Hooks, + printtype=\textit{Hook} +]{Hook}{hook} + +}{% not doc + \newcommand*{\DescribeHook}[2][] {\DTXD@margintagindex{#1}{#2}{Hook}{hook}{usage}} + +}% not doc +\IfPackageLoadedTF{doc}{% doc + +\NewDocElement[ + macrolike=false, + toplevel=false, + idxtype=key, + idxgroup=Keys, + printtype=\textit{Key} +]{Key}{key} + +}{% not doc + \newcommand*{\DescribeKey}[2][] {\DTXD@margintagindex{#1}{#2}{Key}{key}{usage}} + +}% not doc +\IfPackageLoadedTF{doc}{% doc + +\NewDocElement[ + macrolike=false, + toplevel=false, + idxtype=object, + idxgroup=Objects, + printtype=, +]{Object}{object} + +}{% not doc + \newcommand*{\DescribeObject}[2][]{% \@ifundefined{@captype}{% not float? \@bsphack% @@ -506,6 +952,20 @@ \@esphack% \ignorespaces% } + +}% not doc +\IfPackageLoadedTF{doc}{% doc + +\NewDocElement[ + macrolike=false, + toplevel=false, + idxtype=other, + idxgroup=Other, + printtype=, +]{Other}{other} + +}{% not doc + \newcommand*{\DescribeOther}[2][]{% \@ifundefined{@captype}{% not float? \@bsphack% @@ -533,6 +993,8 @@ \ignorespaces% } +}% not doc + \newcommand*{\DescribeDefaultcolor}{green!50!black} @@ -717,8 +1179,14 @@ \endVerbatimOut \par \addvspace{\bigskipamount} -\IfBooleanTF{#1}{\vspace{\bigskipamount}}{\minipage{\linewidth}}% -\captionsetup{type=dtxdexample}% +\IfBooleanTF{#1}% + {% minipage + \minipage{\linewidth}% + \captionsetup{type=dtxexamplefloat}% + }% + {% float + \begin{dtxexamplefloat}% + }% \hrule\medskip \caption{#3} \textcolor{DTXD@examplerulecolor}{\smallskip\hrule} @@ -733,7 +1201,9 @@ \ifstrempty{#2} {} {{\itshape\small #2}} -\IfBooleanTF{#1}{}{\endminipage}% +\IfBooleanTF{#1}% + {\endminipage}% + {\end{dtxexamplefloat}}% } % end dtxexample \AfterEndEnvironment{dtxexample} @@ -747,9 +1217,9 @@ fileext=lox, listname={List of Examples}, name=Example, placement=hbp -]{dtxdexample} +]{dtxexamplefloat} -\captionsetup*[dtxdexample]{ +\captionsetup*[dtxexamplefloat]{ format=hang, font=bf, justification=raggedright, @@ -758,8 +1228,10 @@ skip=0pt, position=top, } -\AtBeginDocument{ -\@ifpackageloaded{cleveref}{\crefname{dtxdexample}{example}{examples}}{} +\AddToHook{begindocument/before}{% Before .aux file is loaded. + \ifdef{\crefname}{ + \crefname{dtxexamplefloat}{example}{examples} + }{} } \newenvironment{noindmacro}[1] |