%%
%% This is file `dtxdescribe.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% dtxdescribe.dtx  (with options: `package')
%% This is a generated file.
%% Copyright 2016–2022 Brian Dunn
%% 
%% 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.

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{dtxdescribe}
    [2023/01/03 v1.07 Describe additional object types in source files.]






















































































\AtBeginDocument{
    \IfPackageLoadedTF{makeidx}{}{
    \IfPackageLoadedTF{splitidx}{}{
        \RequirePackage{makeidx}
        \makeindex
    }}
}

\RequirePackage{etoolbox}[2011/01/03]%

\RequirePackage{xparse}


\RequirePackage{calc}

\RequirePackage{xcolor}
\definecolor{myurlcolor}{rgb}{0,0,.7}
\definecolor{mylinkcolor}{rgb}{.7,0,0}

\RequirePackage{caption}

\RequirePackage{newfloat}

\RequirePackage{fancyvrb}

\RequirePackage{xstring}

\AtBeginDocument{
    \IfPackageLoadedTF{hyperref}{
        \pdfstringdefDisableCommands{%
            \def\quad{ }%
            \def\\{ }%
            \def\pkg#1{#1}%
            \def\ctr#1{#1}%
            \def\bool#1{#1}%
            \def\optn#1{#1}%
            \def\env#1{#1}%
            \def\cs#1{\textbackslash#1}%
            \def\,{ }%
            \def\LuaLaTeX{LuaLaTeX}%
            \def\XeLaTeX{XeLaTeX}%
            \def\TeX{TeX}%
            \def\LaTeX{LaTeX}%
            \def\LaTeXe{LaTeX2e}%
            \def\LuaTeX{LuaTeX}%
            \def\LuaLaTeX{LuaLaTeX}%
            \def\XeTeX{XeTeX}%
            \def\AmS{AMS}%
            \def\Dash{ --- }%
            \def\dash{ -- }%
            \def\Slash{/}%
            \def\prog#1{\detokenize{#1}}%
            \def\progcode#1{#1}%
            \def\filenm#1{\detokenize{#1}}%
            \def\brand#1{#1}%
            \def\acro#1{#1}%
            \def\ODT{ODT}%
            \def\SVG{SVG}%
            \def\PNG{PNG}%
            \def\GIF{GIF}%
            \def\JPG{JPG}%
            \def\EPS{EPS}%
            \def\PDF{PDF}%
            \def\DVI{DVI}%
            \def\UTF{UTF}%
            \def\URL{URL}%
            \def\element#1{#1}%
            \def\attribute#1{#1}%
            \def\attrib#1{#1}%
            \def\HTML{HTML}%
            \def\HTMLfive{HTML5}%
            \def\CSS{CSS}%
            \def\CSSthree{CSS3}%
            \def\EPUB{EPUB}%
            \def\TOC{TOC}%
            \def\LOF{LOF}%
            \def\LOT{LOT}%
        }
    }% yes hyperref
    {% no hyperref
        \newcommand*{\hyperpage}[1]{#1}
    }
}




\RequirePackage{pict2e}
\setlength{\unitlength}{1pt}


\newcommand*{\warningsign}{%
\begin{picture}(10,9)
\put(4,1){\scriptsize!}
\put(0,0){\line(500,866){5}}
\put(10,0){\line(-500,866){5}}
\put(0,0){\line(1,0){10}}
\end{picture}
}


\begingroup
\catcode`\|=0
\catcode`\\=12
|gdef|DTXD@backslash{\}
|endgroup

\IfPackageLoadedTF{doc}{
\IfPackageLoadedTF{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{
\IfPackageLoadedTF{doc}{
\IfPackageLoadedTF{hypdoc}{
\IfPackageLoadedTF{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
}

\def\HD@guesstoclevel#1{1}

\preto\PrintChanges{\def\HD@guesstoclevel#1{0}}

\newcounter{DTXD@indexnumber}

\extendtheindex
    {%
        \addtocounter{DTXD@indexnumber}{1}%
        \def\HD@guesstoclevel##1{0}%
    }
    {}
    {}
    {}

\def\HD@@@bfseries\hfil#1\hfil{%
  \ifx\\#1\\%
  \else
    \raisebox{\baselineskip}[0pt]{%
      \kern-\HD@margin\relax
      \pdfbookmark[\HD@toclevel@subindex]{#1}%      dtxdescribe
        {HD.#1.\arabic{DTXD@indexnumber}}%          dtxdescribe
      \kern\HD@margin\relax
    }%
  \fi
  \hfil#1\hfil
}%

}{}% splitidx loaded
}{}% hypdoc loaded
}{}% doc loaded
}% AtBeginDocument

\IfPackageLoadedTF{doc}{
    \newcommand*{\DTXD@gobble}{2}
}{
    \newcommand*{\DTXD@gobble}{0}
}

\setlength{\marginparsep}{1em}
\setlength{\marginparpush}{.7ex}

\setlength{\parindent}{0em}
\setlength{\parskip}{2ex}
\ifdef{\IndexMin}
    {\setlength{\IndexMin}{40ex}}
    {\newlength{\IndexMin}}

\@ifclassloaded{ltxdoc}{}{
    \def\cmd#1{\cs{\expandafter\cmd@to@cs\string#1}}
    \def\cmd@to@cs#1#2{\char\number`#2\relax}
    \DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}}
    \providecommand\marg[1]{%
        {\ttfamily\char`\{}\meta{#1}{\ttfamily\char`\}}}
    \providecommand\oarg[1]{%
        {\ttfamily[}\meta{#1}{\ttfamily]}}
    \providecommand\parg[1]{%
        {\ttfamily(}\meta{#1}{\ttfamily)}}
    \providecommand\url{\texttt}
}

\AtBeginDocument{
    \IfPackageLoadedTF{doc}{}{% not doc
        \newenvironment*{macro}[1]{%
            \PackageError{dtxdescribe}
                {The 'macro' environment is only\MessageBreak
                    available when using the doc package\MessageBreak
                    with a .dtx source file}
                {This environment only makes sense for .dtx source.}
        }{}
        \newenvironment*{environment}[1]{%
            \PackageError{dtxdescribe}
                {The 'environment' environment is only\MessageBreak
                    available when using the doc package\MessageBreak
                    with a .dtx source file}
                {This environment only makes sense for .dtx source.}
        }{}
        \def\MacroFont{\fontencoding\encodingdefault
                    \fontfamily\ttdefault
                    \fontseries\mddefault
                    \fontshape\updefault
                    \small}%
        \@ifundefined{actualchar}{\def\actualchar{@}}{}
        \@ifundefined{quotechar}{\def\quotechar{"}}{}
        \@ifundefined{levelchar}{\def\levelchar{!}}{}
        \@ifundefined{encapchar}{\def\encapchar{|}}{}
        \@ifundefined{verbatimchar}{\def\verbatimchar{+}}{}
        \setlength\marginparpush{0pt}  \setlength\marginparwidth{8pc}
        \reversemarginpar
        \DeclareRobustCommand\meta[1]{%
            \ensuremath\langle
            \ifmmode \expandafter \nfss@text \fi
            {%
            \meta@font@select
            \edef\meta@hyphen@restore
                {\hyphenchar\the\font\the\hyphenchar\font}%
            \hyphenchar\font\m@ne
            \language\l@nohyphenation
            #1\/%
            \meta@hyphen@restore
            }\ensuremath\rangle
        }
        \def\meta@font@select{\itshape}
    }% not doc
}% AtBeginDocument


\providecommand*{\PrintEnvName}{}
\renewcommand*{\PrintEnvName}[1]
{\strut{\scriptsize{}Env}\quad\MacroFont#1\ }

\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]{%
    \@ifundefined{@captype}{% not float?
        \leavevmode%
        \marginpar{%
            {%
                \hbadness=10000%
                \hfuzz=5em%
                \DTXD@printtype{%
                    #3% margintag
                    \ifblank{#1}{}{ [#1]}% category
                }%
                \texttt{#2}% name
            }%
        }% marginpar
    }{}% not float?
}

\newcommand*{\DTXD@index}[5]{%
\@bsphack%
\begingroup%
\DTXD@origwrindex{%
#2\actualchar{\protect\ttfamily#2} % name
(#4)% index tag
\ifblank{#1}{}{ [#1]}%
\encapchar #5}%
\begingroup%
\DTXD@origwrindex{%
#4:\levelchar% index tag
\ifblank{#1}{}{[#1]:\levelchar}%
#2\actualchar{\protect\ttfamily#2}% name
\encapchar #5}%
\ifblank{#1}{}{% category given
\begingroup%
\DTXD@origwrindex{%
#1\actualchar[#1]:\levelchar% category
#2\actualchar{\protect\ttfamily#2} % name
(#4)% index tag
\encapchar #5}%
}% category given
\@esphack%
\ignorespaces%
}

\newcommand*{\DTXD@margintagindex}[5]{%
\DTXD@margintag{#1}{#2}{#3}%
\DTXD@index{#1}{#2}{#3}{#4}{#5}%
}
\begingroup\lccode`\|=`\\
\lowercase{\endgroup\def\removebs#1{\if#1|\else#1\fi}}
\newcommand*{\DTXD@macroname}[1]{\expandafter\removebs\string#1}

\newcommand*{\DTXD@verbatimcmd}[1]{%
\string\verb\quotechar*\verbatimchar\string#1\verbatimchar%
}

\newcommand*{\DTXD@cmdmargintagindex}[5]{%
\@bsphack%
\@ifundefined{@captype}{% not float?
\leavevmode%
\marginpar{%
    {%
        \hbadness=10000%
        \hfuzz=5em%
        \DTXD@printtype{%
            #3% margin tag
            \ifblank{#1}{}{ [#1]}% category
        }%
        \cmd{#2}% name
    }%
}% marginpar
}{}% not float?
\begingroup%
\DTXD@origwrindex{%
\ifblank{#1}{}{#1\actualchar[#1]:\levelchar}% category
\DTXD@macroname{#2}\actualchar\DTXD@verbatimcmd{#2} % name
(#4)% index tag
\encapchar #5}%
\begingroup%
\DTXD@origwrindex{%
#4:\levelchar% index tag
\ifblank{#1}{}{[#1]:\levelchar}% category
\DTXD@verbatimcmd{#2}% name
\encapchar #5}%
\@esphack%
\ignorespaces%
}


\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


\IfPackageLoadedTF{doc}{

\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%
}

}{}% doc loaded

\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*{\DTXDbreak}{\space\penalty200}

\newcommand*{\DTXD@printobjectname}[2]{%
    #1%
    \actualchar%
    \string\verb% %
    \quotechar%
    *%
    \verbatimchar%
    #2%
    \verbatimchar%
}

\newcommand*{\DTXD@maybecategory}{%
    \ifdefvoid{\DTXD@category}%
        {}%
        {
            \string\DTXDbreak
            [%
            \string\verb%
            \noexpand\quotechar%
            *%
            \verbatimchar\DTXD@category\verbatimchar%
        ]}%
}

\newcommand*{\DTXD@categorylevelname}

\newcommand*{\DTXD@maybecategorylevel}[1]{%
    \ifdefvoid{\DTXD@categorylevelname}%
        {}
        {%
            \index{%
                \DTXD@categorylevelname%
                \noexpand\actualchar%
                \string\verb% % to fool emacs highlighting
                \noexpand\quotechar%
                *%
                \noexpand\verbatimchar
                [\DTXD@category]:%
                \verbatimchar%
                \noexpand\levelchar%
                \noexpand\DTXD@printobjectname{\DTXD@gtempa@nobackslash}{\@gtempa}%
                \ifblank{#1}{}{\string\DTXDbreak (#1)}%
           \noexpand\doc@handleencap{usage}
            }% index
        }%
}

\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]}
        {}
}

\newcommand*{\DTXD@gtempa@nobackslash}{}

\newcommand*{\DTXD@findgtempa}[1]{%
    \edef\@gtempa{\detokenize{#1}}%
    \IfEndWith{\@gtempa}{ }{\StrGobbleRight{\@gtempa}{1}[\@gtempa]}{}%
    \IfBeginWith{\@gtempa}{\DTXD@backslash}%
        {\StrGobbleLeft{\@gtempa}{1}[\DTXD@gtempa@nobackslash]}%
        {\edef\DTXD@gtempa@nobackslash{\@gtempa}}%
}

\def\doc@createspecialindexes#1#2#3{%
  \@temptokena{\space (#2)}%
  \@temptokenb{#3:}%
  \@nameedef{SpecialMain#1Index}##1{%
    \noexpand\DTXD@findgtempa{##1}%
    \noexpand\@bsphack
    \noexpand\DTXD@findcategorylevelname%                   dtxdescribe
  \ifdoc@toplevel
    \noexpand\special@index{%
        \noexpand\DTXD@printobjectname%                     dtxdescribe
            {\noexpand\DTXD@gtempa@nobackslash}%
            {\noexpand\@gtempa}%
        \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\DTXD@printobjectname%                     dtxdescribe
            {\noexpand\DTXD@gtempa@nobackslash}%
            {\noexpand\@gtempa}%
        \noexpand\DTXD@maybecategory%                       dtxdescribe
        \noexpand\encapchar main%
    }%
    \noexpand\DTXD@maybecategorylevel{#2}%                  dtxdescribe
  \fi
  \noexpand\@esphack}%
  \@nameedef{Special#1Index}##1{%
    \noexpand\DTXD@findgtempa{##1}%
    \noexpand\@bsphack
    \noexpand\DTXD@findcategorylevelname%                   dtxdescribe
  \ifdoc@toplevel
        \noexpand\doc@providetarget
        \noexpand\index{%
            \noexpand\DTXD@printobjectname%                 dtxdescribe
                {\noexpand\DTXD@gtempa@nobackslash}%
                {\noexpand\@gtempa}%
            \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\DTXD@printobjectname%                     dtxdescribe
            {\noexpand\DTXD@gtempa@nobackslash}%
            {\noexpand\@gtempa}%
        \noexpand\DTXD@maybecategory%                       dtxdescribe
        \noexpand\doc@handleencap{usage}%
    }%
    \noexpand\DTXD@maybecategorylevel{#2}%                  dtxdescribe
  \fi
    \noexpand\@esphack}}

\def\doc@createspecialmacrolikeindexes#1#2#3{%
  \@temptokena{\space (#2)}%
  \@temptokenb{#3:}%
  \@nameedef{Code#1Index}##1##2{%
    \noexpand\DTXD@findgtempa{##2}%
    \noexpand\@bsphack
    \noexpand\DTXD@findcategorylevelname%                   dtxdescribe
  \noexpand\ifdoc@noindex\noexpand\else
    \ifdoc@toplevel
      \noexpand\special@index{%
            \noexpand\DTXD@printobjectname%                 dtxdescribe
                {\noexpand\DTXD@gtempa@nobackslash}%
                {\noexpand\@gtempa}%
            \ifx\@nil#2\@nil\else \the\@temptokena \fi
            \noexpand\DTXD@maybecategory%                   dtxdescribe
            \noexpand\encapchar ##1%
      }%
      \noexpand\DTXD@maybecategorylevel{#2}%                dtxdescribe
    \fi
    \ifx\@nil#3\@nil\else
      \noexpand\special@index{%
            \the\@temptokenb\noexpand\levelchar
            \noexpand\DTXD@printobjectname%                 dtxdescribe
                {\noexpand\DTXD@gtempa@nobackslash}%
                {\noexpand\@gtempa}%
            \noexpand\DTXD@maybecategory%                   dtxdescribe
            \noexpand\encapchar ##1%
      }%
      \noexpand\DTXD@maybecategorylevel{#2}%                dtxdescribe
    \fi
  \noexpand\fi
    \noexpand\@esphack}%
  \@nameedef{SpecialMain#1Index}##1{%
    \expandafter\noexpand\csname Code#1Index\endcsname
        {main}{##1}}%
  \@nameedef{Special#1Index}##1{%
    \noexpand\DTXD@findgtempa{##1}%
    \noexpand\@bsphack
    \noexpand\DTXD@findcategorylevelname%                   dtxdescribe
  \noexpand\ifdoc@noindex\noexpand\else
    \ifdoc@toplevel
      \noexpand\doc@providetarget
      \noexpand\index{%
            \noexpand\DTXD@printobjectname%                 dtxdescribe
                {\noexpand\DTXD@gtempa@nobackslash}%
                {\noexpand\@gtempa}%
            \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\DTXD@printobjectname%                 dtxdescribe
                {\noexpand\DTXD@gtempa@nobackslash}%
                {\noexpand\@gtempa}%
            \noexpand\DTXD@maybecategory%                   dtxdescribe
            \noexpand\doc@handleencap{usage}%
      }%
      \noexpand\DTXD@maybecategorylevel{#2}%                dtxdescribe
    \fi
  \noexpand\fi
    \noexpand\@esphack}}

}{}% doc loaded


\IfPackageLoadedTF{doc}{}{% not doc

\providecommand*{\DescribeMacro}{}
\renewcommand*{\DescribeMacro}[2][]{%
\@bsphack%
\@ifundefined{@captype}{% not float?
\leavevmode%
\marginpar{%
    {%
        \hbadness=10000%
        \hfuzz=5em%
        \raggedleft%
        \ifblank{#1}{}{{\scriptsize\textsf{[#1]}} }% category
        \cmd{#2}% name
    }%
}% marginpar
}{}% not float?
\begingroup%
\DTXD@origwrindex{%
    \DTXD@macroname{#2}\actualchar\DTXD@verbatimcmd{#2}% name
    \ifblank{#1}{}{\levelchar[#1]}% category
    \encapchar usage%
}%
\ifblank{#1}%
{}% no category
{% category given
    \begingroup%
    \DTXD@origwrindex{%
    #1\actualchar[#1]:\levelchar%
    \DTXD@macroname{#2}\actualchar\DTXD@verbatimcmd{#2}%
    \encapchar usage}%
}% category given
\@esphack%
\ignorespaces%
}

}% not doc

\IfPackageLoadedTF{doc}{}{% not doc

\providecommand*{\DescribeEnv}{}
\renewcommand*{\DescribeEnv}[2][]
{\DTXD@margintagindex{#1}{#2}{Env}{environment}{usage}}

}% not doc


\IfPackageLoadedTF{doc}{}{% not doc
\newcommand*{\DTXD@filename}{}

\newcommand*{\DTXD@filemarginparindex}[5]{%
\renewcommand{\DTXD@filename}{\detokenize{#2}}%
\StrSubstitute{\DTXD@filename}{\detokenize{_}}{\detokenize{\_}}[\DTXD@filename]%
\DTXD@margintag{#1}{#2}{#3}%
\DTXD@index{#1}{\DTXD@filename}{#3}{#4}{#5}%
\endgroup%
\ignorespaces%
}
}% not doc
\IfPackageLoadedTF{doc}{% doc

\RenewDocElement[macrolike = true ,
                idxtype   = ,
                idxgroup  = ,
                printtype =
               ]{Macro}{macro}

\RenewDocElement[macrolike = false ,
                idxtype   = env.  ,
                idxgroup  = environments ,
                printtype = \textit{env.}
               ]{Env}{environment}

}{}% doc
\IfPackageLoadedTF{doc}{% doc

\NewDocElement[
    macrolike=false,
    toplevel=true,
    idxtype=file,
    idxgroup=Files,
    printtype=\textit{file}
]{File}{file}

}{% not doc

\newcommand*{\DTXD@DescribeFile}[2][]{%
    \DTXD@filemarginparindex{#1}{#2}{File}{file}{usage}%
}

\newcommand*{\DescribeFile}{%
    \begingroup\catcode`\_=12 \DTXD@DescribeFile%
}

}% not doc
\IfPackageLoadedTF{doc}{% doc

\NewDocElement[
    macrolike=false,
    toplevel=true,
    idxtype=program,
    idxgroup=Programs,
    printtype=\textit{Prog}
]{Program}{program}

}{% not doc

\newcommand*{\DTXD@DescribeProgram}[2][]{%
    \DTXD@filemarginparindex{#1}{#2}{Prog}{program}{usage}%
}

\newcommand*{\DescribeProgram}{%
    \begingroup\catcode`\_=12 \DTXD@DescribeProgram%
}
}% not doc


\IfPackageLoadedTF{doc}{% doc

\NewDocElement[
    macrolike=false,
    toplevel=true,
    idxtype=command,
    idxgroup=Commands,
    printtype=\textit{Cmd}
]{Command}{command}

}{% not doc

\newcommand*{\DTXD@DescribeCommand}[2][]{%
    \DTXD@filemarginparindex{#1}{#2}{Cmd}{command}{usage}%
}

\newcommand*{\DescribeCommand}{%
    \begingroup\catcode`\_=12 \DTXD@DescribeCommand%
}

}% not doc

\IfPackageLoadedTF{doc}{% doc

\NewDocElement[
    macrolike=false,
    toplevel=true,
    idxtype=package,
    idxgroup=Packages,
    printtype=\textit{Pkg}
]{Package}{package}

}{% not doc

\newcommand*{\DTXD@DescribePackage}[2][]{%
    \DTXD@filemarginparindex{#1}{#2}{Pkg}{package}{usage}%
}

\newcommand*{\DescribePackage}{%
    \begingroup\catcode`\_=12 \DTXD@DescribePackage%
}

}% not doc


\IfPackageLoadedTF{doc}{% doc

\NewDocElement[
    macrolike=false,
    toplevel=true,
    idxtype=class,
    idxgroup=Classes,
    printtype=\textit{Cls}
]{Class}{class}

}{% not doc

\newcommand*{\DTXD@DescribeClass}[2][]{%
    \DTXD@filemarginparindex{#1}{#2}{Cls}{class}{usage}%
}

\newcommand*{\DescribeClass}{%
    \begingroup\catcode`\_=12 \DTXD@DescribeClass%
}

}% not doc

\IfPackageLoadedTF{doc}{% doc

\NewDocElement[
    macrolike=false,
    toplevel=true,
    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=true,
    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=true,
    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=true,
    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=true,
    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=true,
    toplevel=true,
    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=true,
    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=true,
    idxtype=object,
    idxgroup=Objects,
    printtype=,
]{Object}{object}

}{% not doc

\newcommand*{\DescribeObject}[2][]{%
\@ifundefined{@captype}{% not float?
    \@bsphack%
    \leavevmode%
    \marginpar{%
        \hbadness=10000%
        \hfuzz=5em%
        \raggedleft%
        \ifblank{#1}{}{\raggedleft{\scriptsize[#1]} }
        \texttt{#2}%
    }%
}{}% not float?
\ifblank{#1}%
{%
    \begingroup%
    \DTXD@origwrindex{%
        #2\actualchar{\protect\ttfamily#2}%
        \encapchar usage%
    }%
}%
{%
    \begingroup%
    \DTXD@origwrindex{%
        #2\actualchar{\protect\ttfamily#2} [#1]%
        \encapchar usage%
    }%
    \begingroup%
    \DTXD@origwrindex{%
        #1\actualchar[#1]:\levelchar#2\actualchar{\protect\ttfamily#2}%
        \encapchar usage%
    }%
}%
\@esphack%
\ignorespaces%
}

}% not doc
\IfPackageLoadedTF{doc}{% doc

\NewDocElement[
    macrolike=false,
    toplevel=true,
    idxtype=other,
    idxgroup=Other,
    printtype=,
]{Other}{other}

}{% not doc

\newcommand*{\DescribeOther}[2][]{%
\@ifundefined{@captype}{% not float?
    \@bsphack%
    \leavevmode%
    \marginpar{%
        \hbadness=10000%
        \hfuzz=5em%
        \raggedleft%
        \ifblank{#1}{}{\raggedleft{\scriptsize[#1]} }%
        #2%
    }%
}{}% not float?
\ifblank{#1}%
{%
    \begingroup%
    \DTXD@origwrindex{#2\encapchar usage}%
}%
{%
    \begingroup%
    \DTXD@origwrindex{#2 [#1]\encapchar usage}%
    \begingroup%
    \DTXD@origwrindex{#1\actualchar[#1]:\levelchar#2\encapchar usage}%
}%
\@esphack%
\ignorespaces%
}

}% not doc


\newcommand*{\DescribeDefaultcolor}{green!50!black}

\newcommand{\DescribeDefault}[1]{%
    \margintag{%
        \footnotesize%
        \textcolor{\DescribeDefaultcolor}{%
            Default: \texttt{#1}%
        }%
    }%
}

\newcommand{\ItemDescribeMacro}[2][]{%
    \item[\cmd{#2}:]%
    \setlength{\parskip}{1.5ex}%
    \DescribeMacro[#1]{#2}%
}

\newcommand{\ItemDescribeEnv}[2][]{%
    \item[\env{#2}:]%
    \setlength{\parskip}{1.5ex}%
    \DescribeEnv[#1]{#2}%
}

\newcommand{\ItemDescribeArgument}[2][]{%
    \item[\texttt{#2}:]%
    \setlength{\parskip}{1.5ex}%
    \DescribeArgument[#1]{#2}%
}

\newcommand{\ItemDescribeBoolean}[2][]{%
    \item[\texttt{#2}:]%
    \setlength{\parskip}{1.5ex}%
    \DescribeBoolean[#1]{#2}%
}

\newcommand{\ItemDescribeLength}[2][]{%
    \item[\cmd{#2}:]%
    \setlength{\parskip}{1.5ex}%
    \DescribeLength[#1]{#2}%
}

\newcommand{\ItemDescribeCounter}[2][]{%
    \item[\texttt{#2}:]%
    \setlength{\parskip}{1.5ex}%
    \DescribeCounter[#1]{#2}%
}

\newcommand{\ItemDescribeHook}[2][]{%
    \item[\texttt{#2}:]%
    \setlength{\parskip}{1.5ex}%
    \DescribeHook[#1]{#2}%
}

\newcommand{\ItemDescribeKey}[2][]{%
    \item[\texttt{#2}:]%
    \setlength{\parskip}{1.5ex}%
    \DescribeKey[#1]{#2}%
}

\newcommand{\DTXD@ItemDescribePackage}[2][]{%
    \item[\texttt{#2}:]%
    \setlength{\parskip}{1.5ex}%
    \DescribePackage[#1]{#2}%
    \endgroup%
}

\newcommand{\ItemDescribePackage}{%
    \begingroup\catcode`\_=12 \DTXD@ItemDescribePackage%
}

\newcommand{\DTXD@ItemDescribeClass}[2][]{%
    \item[\texttt{#2}:]%
    \setlength{\parskip}{1.5ex}%
    \DescribeClass[#1]{#2}%
    \endgroup%
}

\newcommand{\ItemDescribeClass}{%
    \begingroup\catcode`\_=12 \DTXD@ItemDescribeClass%
}

\newcommand{\ItemDescribeOption}[2][]{%
    \item[\texttt{#2}:]%
    \setlength{\parskip}{1.5ex}%
    \DescribeOption[#1]{#2}%
}

\newcommand{\DTXD@ItemDescribeFile}[2][]{%
    \item[\texttt{#2}:]%
    \setlength{\parskip}{1.5ex}%
    \DescribeFile[#1]{#2}%
    \endgroup%
}

\newcommand{\ItemDescribeFile}{%
    \begingroup\catcode`\_=12 \DTXD@ItemDescribeFile%
}

\newcommand{\DTXD@ItemDescribeProgram}[2][]{%
    \item[\texttt{#2}:]%
    \setlength{\parskip}{1.5ex}%
    \DescribeProgram[#1]{#2}%
    \endgroup%
}

\newcommand{\ItemDescribeProgram}{%
    \begingroup\catcode`\_=12 \DTXD@ItemDescribeProgram%
}

\newcommand{\DTXD@ItemDescribeCommand}[2][]{%
    \item[\texttt{#2}:]%
    \setlength{\parskip}{1.5ex}%
    \DescribeCommand[#1]{#2}%
    \endgroup%
}

\newcommand{\ItemDescribeCommand}{%
    \begingroup\catcode`\_=12 \DTXD@ItemDescribeCommand%
}

\newcommand{\ItemDescribeObject}[2][]{%
    \item[\texttt{#2}:]%
    \setlength{\parskip}{1.5ex}%
    \DescribeObject[#1]{#2}%
}

\newcommand{\ItemDescribeOther}[2][]{%
    \item[\texttt{#2}:]%
    \setlength{\parskip}{1.5ex}%
    \DescribeOther[#1]{#2}%
}


\newcommand*{\margintagcolor}{blue!70!black}

\newcommand{\margintag}[1]{%
\@ifundefined{@captype}{% not float?
\marginpar{\raggedleft\textcolor{\margintagcolor}{#1}}%
\ignorespaces%
}{}% not float?
}

\newcommand*{\watchoutcolor}{red!50!black}

\newcommand{\watchout}[1][]{%
\@ifundefined{@captype}{% not float?
    \marginpar{%
        \raggedleft%
        \textcolor{\watchoutcolor}{\warningsign\normalsize\quad#1}%
    }%
    \ignorespaces%
}{}% not float?
}

\NewDocumentCommand{\shownesting}{s O{1} m m}{
    \IfBooleanF{#1}{
        \par\smallskip
    }
    \fbox{
        \begin{minipage}{#2\linewidth-2em}
            \hbadness=10000\relax%
            #3\par\smallskip
            \hspace{1em}
            \begin{minipage}{\linewidth-1.5em}
                #4
            \end{minipage}
        \end{minipage}
    }
}

\definecolor{DTXD@examplerulecolor}{rgb}{.9,.9,.9}
\newcommand*{\dtxexamplecodename}{Code:}

\newcommand*{\dtxexampleresultname}{Result:}

\NewDocumentEnvironment{dtxexample}{s +O{} m}
{% start dtxexample
\VerbatimOut[gobble=\DTXD@gobble,tabsize=4]{dtxexample_cut.tex}%
}% start dtxexample
{% end dtxexample
\endVerbatimOut
\par
\addvspace{\bigskipamount}
\IfBooleanTF{#1}%
    {% minipage
        \minipage{\linewidth}%
        \captionsetup{type=dtxexamplefloat}%
    }%
    {% float
        \begin{dtxexamplefloat}%
    }%
\hrule\medskip
\caption{#3}
\textcolor{DTXD@examplerulecolor}{\smallskip\hrule}
\smallskip
{\scriptsize\itshape\dtxexamplecodename}
\VerbatimInput[tabsize=4]{dtxexample_cut.tex}
\unskip
\textcolor{DTXD@examplerulecolor}{\hrule}
\smallskip
{\scriptsize\itshape\dtxexampleresultname}

\ifstrempty{#2}
{}
{{\itshape\small #2}}
\IfBooleanTF{#1}%
    {\endminipage}%
    {\end{dtxexamplefloat}}%
} % end dtxexample

\AfterEndEnvironment{dtxexample}
{%
\par\unskip\input{dtxexample_cut.tex}%
\medskip\hrule%
}

\DeclareFloatingEnvironment[
fileext=lox,
listname={List of Examples},
name=Example,
placement=hbp
]{dtxexamplefloat}

\captionsetup*[dtxexamplefloat]{
format=hang,
font=bf,
justification=raggedright,
singlelinecheck=false,
skip=0pt,
position=top,
}

\AtBeginDocument{
    \ifdef{\crefname}{
        \crefname{dtxexamplefloat}{example}{examples}
    }{}
}

\newenvironment{noindmacro}[1]
{
    \setlength{\parskip}{\marginparpush}
    \leavevmode\par\DTXD@margintag{}{\cmd{#1}}{}
}
{\unskip}
\newenvironment{noindenvironment}[1]
{
    \setlength{\parskip}{\marginparpush}
    \leavevmode\par\DTXD@margintag{}{#1}{Env}
}
{\unskip}
\newcommand*{\fquad}{\hspace*{1em}}

\newcommand*{\fqquad}{\hspace*{2em}}

\newcommand*{\fqqquad}{\hspace*{3em}}
\DefineVerbatimEnvironment{sourceverb}{Verbatim}
    {gobble=\DTXD@gobble,tabsize=4,xleftmargin=2em}
\BeforeBeginEnvironment{sourceverb}{\vspace*{-.5\parskip}}

    \DefineVerbatimEnvironment{fsourceverb}{Verbatim}
        {gobble=\DTXD@gobble,tabsize=4,xleftmargin=2em,frame=lines}
\BeforeBeginEnvironment{fsourceverb}{\vspace*{-.5\parskip}}

\newenvironment{sourcedisplay}
{
    \leavevmode
    \par
    \fqquad\minipage{\linewidth-4em}
    \ttfamily
}
{%
    \endminipage
    \par
}

\newenvironment{UIdisplay}
{
    \leavevmode
    \par
    \fqquad\minipage{\linewidth-4em}
    \sffamily\bfseries
}
{
    \endminipage
    \par
}

\newcommand*{\userentryname}{Enter~$\Rightarrow$}

\newcommand{\userentry}[1]{%
\par
\fqquad%
\begin{minipage}{\linewidth-2em}
    {\footnotesize \userentryname}\quad\cmds{#1}
\end{minipage}
\par
}

\newenvironment{docsidebar}[1][]
{%
    \quote\unskip\medskip
    \setlength{\parskip}{1.5ex}%
    \ifblank{#1}{}{\textit{#1}\newline}%
    \rule[.5\bigskipamount]{\linewidth}{.4pt}%
    \newline%
}
{%
    \leavevmode\par
    \rule[\bigskipamount]{\linewidth}{.4pt}
    \endquote\unskip
}
\providerobustcmd*{\pkg}[1]{\mbox{\textsf{#1}}}

\providerobustcmd*{\cs}[1]{\texttt{\char`\\#1}}

\providerobustcmd*{\env}[1]{\mbox{\texttt{#1}}}

\providecommand\marg[1]{%
  {\ttfamily\char`\{}\meta{#1}{\ttfamily\char`\}}}

\providecommand\oarg[1]{%
  {\ttfamily[}\meta{#1}{\ttfamily]}}

\providecommand\parg[1]{%
  {\ttfamily(}\meta{#1}{\ttfamily)}}

\providerobustcmd*{\ctr}[1]{\mbox{\texttt{#1}}}

\providerobustcmd*{\bool}[1]{\mbox{\texttt{#1}}}

\providerobustcmd*{\optn}[1]{\mbox{\texttt{#1}}}

\providerobustcmd*{\TOC}{\acro{TOC}}

\providerobustcmd*{\LOF}{\acro{LOF}}

\providerobustcmd*{\LOT}{\acro{LOT}}


\providerobustcmd*{\cmds}[1]{\mbox{\textbf{\texttt{#1}}}}

\providerobustcmd*{\progcode}[1]{\mbox{\texttt{#1}}}

\newcommand*{\DTXD@prog}[1]{%
    \mbox{\textsf{\textsl{\detokenize{#1}}}}%
    \endgroup%
}

\providerobustcmd*{\prog}{%
    \begingroup%
    \catcode`\_=12%
    \DTXD@prog%
}

\newcommand*{\DTXD@filenm}[1]{%
    \mbox{\texttt{\detokenize{#1}}}%
    \endgroup%
}

\providerobustcmd*{\filenm}{%
    \begingroup%
    \catcode`\_=12%
    \DTXD@filenm%
}

\providerobustcmd*{\UI}[1]{\textbf{\textsf{#1}}}
\providerobustcmd*{\ODT}{\acro{ODT}}

\providerobustcmd*{\SVG}{\acro{SVG}}

\providerobustcmd*{\PNG}{\acro{PNG}}

\providerobustcmd*{\GIF}{\acro{GIF}}

\providerobustcmd*{\JPG}{\acro{JPG}}

\providerobustcmd*{\EPS}{\acro{EPS}}

\providerobustcmd*{\PDF}{\acro{PDF}}

\providerobustcmd*{\DVI}{\acro{DVI}}
\providerobustcmd*{\UTF}{\acro{UTF}}

\providerobustcmd*{\URL}{\acro{URL}}

\providerobustcmd*{\element}[1]{\texttt{<#1>}}

\providerobustcmd*{\attrib}[1]{\mbox{\texttt{#1}}}

\providerobustcmd*{\attribute}[1]{\mbox{\texttt{#1}}}

\providerobustcmd*{\HTML}{\acro{HTML}}

\providerobustcmd*{\HTMLfive}{\HTML\textsc{5}}

\providerobustcmd*{\CSS}{\acro{CSS}}

\providerobustcmd*{\CSSthree}{\CSS\textsc{3}}

\providerobustcmd*{\EPUB}{\acro{EPUB}}
\providerobustcmd*{\TikZ}{Ti\emph{k}Z}

\providerobustcmd*{\CTAN}{\acro{CTAN}}

\providerobustcmd*{\TDS}{\acro{TDS}}
\providerobustcmd*{\MathML}{Math\acro{ML}}
\providerobustcmd*{\MathJax}{\brand{MathJax}}
\providerobustcmd*{\brand}[1]{\textsc{#1}}

\providerobustcmd*{\acro}[1]{\textsc{\lowercase{#1}}}

\providerobustcmd*{\supregistered}{\textsuperscript{\textregistered}}
\providerobustcmd*{\dviTeX}{\mbox{\DVI\,\TeX}}
\providerobustcmd*{\dviLaTeX}{\mbox{\DVI\,\LaTeX}}
\providerobustcmd*{\pdfTeX}{\mbox{\PDF\,\TeX}}
\providerobustcmd*{\pdfLaTeX}{\mbox{\PDF\,\LaTeX}}
\providerobustcmd*{\LuaTeX}{\mbox{Lua\TeX}}
\providerobustcmd*{\LuaLaTeX}{\mbox{Lua\LaTeX}}
\providerobustcmd*{\XeTeXrevE}
    {\hspace{-.1667em}\raisebox{-.5ex}{E}\hspace{-.125em}}

\AtBeginDocument{
\IfPackageLoadedTF{graphics}{
    \renewrobustcmd*{\XeTeXrevE}
        {\hspace{-.1667em}\raisebox{-.5ex}{\reflectbox{E}}\hspace{-.125em}}
}{}
}

\providerobustcmd*{\XeTeX}{\mbox{X\XeTeXrevE\TeX}}
\providerobustcmd*{\XeLaTeX}{\mbox{X\XeTeXrevE\LaTeX}}
\providerobustcmd*{\AmS}{%
    \leavevmode\hbox{$\mathcal A\kern-.2em\lower.376ex%
    \hbox{$\mathcal M$}\kern-.2em\mathcal S$}%
}
\providerobustcmd*{\LyX}{\textsf{LyX}}
\providerobustcmd*{\BibTeX}{\mbox{B\textsc{ib}\TeX}}
\providerobustcmd*{\MakeIndex}{\prog{MakeIndex}}
\providerobustcmd*{\ConTeXt}{\mbox{Con\TeX{}t}}
\providerobustcmd*{\MiKTeX}{\mbox{MiK\TeX}}
\DeclareRobustCommand{\thinskip}{\hskip 0.16667em\relax}
\def\endash{–}
\def\emdash{—}
\newcommand{\thinbrspace}{%
    \hspace{.16667em}\penalty\exhyphenpenalty\hspace{0pt}%
}
\newcommand{\thinthinbrspace}{%
    \hspace{.08333em}\penalty\exhyphenpenalty\hspace{0pt}%
}
\newrobustcmd{\Dash}{\unskip\thinspace\emdash\thinbrspace}
\newrobustcmd{\dash}{\unskip\thinspace\endash\thinbrspace}
\newrobustcmd{\Slash}{\unskip\hspace{.08333em}/\thinthinbrspace}

\endinput
%%
%% End of file `dtxdescribe.sty'.
