summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-12-07 21:11:10 +0000
committerKarl Berry <karl@freefriends.org>2022-12-07 21:11:10 +0000
commit6395694a7d4a188bbc2c7edbd29a74ff42020f49 (patch)
tree71f030a0025f544f197a0456c95e0dad42a28e40 /Master/texmf-dist/tex
parentbde4636a8d180976630426405be28fc9e51aba9f (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.sty506
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]