% \iffalse meta-comment
% ==========================================================================
% komascript-source.doc.dtx
% Copyright (c) Markus Kohm, 2022
%
% This file is part of the LaTeX2e KOMA-Script bundle.
%
% This work may be distributed and/or modified under the conditions of
% the LaTeX Project Public License, version 1.3c of the license.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX 
% version 2005/12/01 or later and of this work.
%
% This work has the LPPL maintenance status "author-maintained".
%
% The Current Maintainer and author of this work is Markus Kohm.
%
% This work consists of all files listed in MANIFEST.md.
% --------------------------------------------------------------------------
% Note: This is a self unpacking dtx-file, so you have to run:
%         tex koma-script-source-doc.dtx
%       to unpack the file(s), but
%         lualatex-dev koma-script-source-doc.dtx
%         mkindex koma-script-source-doc
%         lualatex-dev koma-script-source-doc.dtx
%         mkindex koma-script-source-doc
%         lualatex-dev koma-script-source-doc.dtx
%       to generate the manual. Before generation of the manual it is
%       recommended to install or at least unpack KOMA-Script.
% ==========================================================================
%%
%<+drv>\ProvidesFile{koma-script-source-doc.drv}
%<+class>\ProvidesClass{koma-script-source-doc}
%<*ins>
\expandafter\expandafter\expandafter\ifx\csname ProvidesFile\endcsname\relax
  \def\ProvidesFile#1[#2]{}
\fi
%</ins>
%<*dtx>
\ProvidesFile{koma-script-source-doc.dtx}
%</dtx>
%<+ins>\ProvidesFile{koma-script-source-doc.ins}
[2022-03-10 v0.91 KOMA-Script source documentation]
%<*dtx>
\ifx\documentclass\undefined
%</dtx>
%<*ins>
  \input docstrip.tex
  \ifToplevel{\keepsilent\askforoverwritefalse}
  \generate{%
%    \file{koma-script-source-doc.drv}{%
%      \from{koma-script-source-doc.dtx}{drv}%
%    }
%    \file{koma-script-source-doc.ins}{%
%      \from{koma-script-source-doc.dtx}{ins}%
%    }
    \file{koma-script-source-doc.cls}{%
      \from{koma-script-source-doc.dtx}{class}%
      \from{scrlogo.dtx}{logo,forcedefine}%
    }%
  }
%</ins>
%<*dtx>
\else
  \let\endbatchfile\relax
\fi
%</dtx>  
%<*dtx|ins>
\endbatchfile
%</dtx|ins>
%<*drv>
\documentclass[USenglish]{koma-script-source-doc}
\usepackage{libertinus}
\usepackage{babel}
\NewDocElement[%
  macrolike = false,
  toplevel  = true,
  idxtype   = \textit{d.\,i.},
  idxgroup  = Documentation items,
  printtype = \textit{d.\,i.},
]{DocItem}{docitem}
\begin{document}
\DocInput{koma-script-source-doc.dtx}
\end{document}
%</drv>
% \fi^^A meta-comment
%
% \changes{v0.0}{2022/01/15}{start of the new class}
% \changes{v0.1}{2022/01/15}{first self documenting test}
% \changes{v0.6}{2022/02/02}{force definition of \KOMAScript{} logo}
% \changes{v0.6}{2022/02/02}{\pkg{hyperref} hook for \KOMAScript{} logo moved
%   to \file{scrlogo.dtx}}
%
% \DoNotIndex{\actualchar}
%
% \GetFileInfo{\jobname.dtx}
% \title{\href{https://komascript.de}{\KOMAScript} Source Documentation\\
%   Using\\
%   \cls*{koma-script-source-doc}}
% \author{\href{mailto:komascript@gmx.info}{Markus Kohm}}
% \date{Version \fileversion{} of \filedate}
% \maketitle
% \begin{abstract}
% From 2002 up to end of 2021 \cls*{scrdoc} was the class, that has been used
% for the sources of \KOMAScript{} and several other packages of the
% \KOMAScript{} author. This class was more or less a ugly hack to use a
% modified and extended version of \cls{ltxdoc}, the source documentation
% class of The \LaTeX{} Team. There has been advisement to redesign this
% class for years, but as changing the source documentation class is more a
% work of month than of days, I've always put it on the back burner.
%
% In January 2022, The \LaTeX{} Team switched over from \pkg{doc} version 2 to
% version 3. The new version is compatible on user interface level, but as
% expected not on implementation level. So the extensions made in \cls*{scrdoc}
% result in several error messages. For such cases The \LaTeX{} Team has the
% fallback solution to use an old \pkg{doc}. But this can only be used, if you
% load \pkg{doc} yourself using either |\usepackage| or
% |\RequirePackage|. If class \cls{ltxdoc} is used, the fallback does not
% exist.
%
% A first workaround for \cls*{scrdoc} was a typical hacker solution, that
% forces \cls{ltxdoc} to use an old version of \pkg{doc} and to fix the
% resulting issues after loading \cls{ltxdoc}. But this does only work as long
% as new releases of \cls{ltxdoc} are compatible with the \pkg{doc} release of
% 2021.
%
% So in January 2022, it was really time for a new \KOMAScript{} source
% documentation class. This new class does not use internal commands of
% \cls{ltxdoc} any longer but uses the extended interface of \pkg{doc} version
% 3 to define further documentation items.
% \end{abstract}
%
% \tableofcontents
%
% \section{Prerequisites}
% \label{sec:prerequisites}
%
% Class \cls*{koma-script-source-doc} needs at least class \cls{ltxdoc} version
% 2.1d which depends on package \pkg{doc} version 3, because it used several
% of the new features of that \pkg{doc} release. This is part of
% \texttt{latex-base-dev} 2022-06-01 pre-release~1 distributed on
% \href{https://www.ctan.org}{CTAN} on 14th January 2022 and therefore will be
% part of \LaTeX{} 2022-06-01. If you still use an older \LaTeX{} you cannot
% use class \cls*{koma-script-source-doc}.
%
%
% \section{Basic Settings}
% \label{sec:basicsettings}
%
% For \KOMAScript{} we use some basic settings:
% \begin{itemize}
% \item Generation of the indexing of new commands is generally enabled by
%   \pkg{doc}. We do not use \cs{EnableCrossrefs}, because this would not
%   allow to disable this feature using \cs{DisableCrossrefs}. It is also
%   recommended not to generally use \cs{EnableCrossrefs} in the
%   \file{dtx}-file.
% \item We use \cs{CodeLineIndex} to have code line numbers for the
%   indexing. This could be problematic sometimes. In this case, you should
%   use \cs{PageIndex} and \cs{CodelineNumbered} to use page numbers in the
%   index but nevertheless add line numbers to the code.
% \item For \KOMAScript{} code we usually record the changes. So we use
%   \cs{RecordChanges} and option \opt{reportchangedates} This is the only
%   real changelog we do. However, if your \file{dtx}-file contains the user
%   manual, it would be recommended to list the main changes like new features
%   and incompatibilities as a section either at the very beginning or the end
%   of the user manual.
% \item \DescribeOption{indexlatex} For \KOMAScript{} sources I do not like to
%   index all the \LaTeX{} interface commands and internal
%   commands\footnote{This does only work for those \LaTeX{} macros, already
%   internally listed. The list should be generated automatically after each
%   \LaTeX{} release. Unfortunately, currently it is build step by step with
%   every new \KOMAScript{} release instead.}. You can changes this, using
%   option \opt{indexlatex}. You can also use explicit \opt{indexlatex=false}
%   to again not index the \LaTeX{} kernel macros.
% \item You also should use \cs{GetFileInfo}\marg{dtx-filename} to get
%   information like \cs{filedate} and \cs{fileversion} from the
%   \cs{ProvidesFile} command of the \file{dtx}-file. Sometimes it may even be
%   better to use the generated package or class as argument.
% \end{itemize}
%
%
% \section{Simple Formatting Commands}
% \label{sec:simpleformatting}
%
% \DescribeCommand{\file}
% \DescribeCommand{\opt}
% \DescribeCommand{\optvalue}
% \DescribeCommand{\env}
% \DescribeCommand{\cnt}
% \DescribeCommand{\fnt}
% \DescribeCommand{\len}
% \DescribeCommand{\var}
% \DescribeCommand{\plen}
% \DescribeCommand{\pstyle}
% \DescribeCommand{\dhook}
% There are some very simple formatting commands. They all expect one
% mandatory argument \meta{object name}. The default formatting is to use
% \cs{texttt}. The commands are mentioned for the name of a file, option,
% value of an option, environment, \LaTeX{} counter, font, length (either
% dimension or skip), variable (usually \KOMAScript{} variables used by
% \cls*{scrlttr2} or \pkg*{scrletter}), pseudo-length (of \cls*{scrlttr2} or
% \pkg*{scrletter}), page style, or do hook.
%
% \DescribeCommand{\cls}
% \DescribeCommand{\pkg}
% The commands:
% \begin{quote}
%   \cs{cls}\oarg{hyper link}\marg{package name}\hfill and\hfill
%   \cs{pkg}\oarg{hyper link}\marg{class name}
% \end{quote}
% do not only print the name of a class or package, but also generate a hyper
% link. For this the commands have a first optional argument. If this is
% empty, no link will be generated. If it is not empty, it has to be the
% link. If it is not used an automatic package link to the
% \href{https://www.ctan.org/pkg}{CTAN} package with the same name will be
% generated. There are also star variants \cs{cls*} and \cs{pkg*}, that do not
% produce any link. For links with special characters like \texttt{\char`\#}
% it is recommended to use \cs{href} and the star variant.
% \begin{center}
%   Examples:\hspace{0pt plus 1filll}\null\\[-\baselineskip]
%   \cs{cls}|{scrbook}| \textrightarrow{} \cls{scrbook}\\
%   \cs{cls*}|{scrbook}| \textrightarrow{} \cls*{scrbook}\\
%   \cs{cls}|[https://koma-script.de]{koma-script-source-doc}|
%     \textrightarrow{} \cls[https://koma-script.de]{koma-script-source-doc}\\
%   \cs{pkg}|[]{scrlayer}| \textrightarrow{} \pkg[]{scrlayer} \\
%   \cs{href}|{http://mirrors.ctan.org/macros/latex/contrib/koma-script/doc/scrguien.pdf#cha:typearea}{\pkg*{typearea}}|
%     \textrightarrow{}
%     \href{http://mirrors.ctan.org/macros/latex/contrib/koma-script/doc/scrguien.pdf#chapter.2}{\pkg*{typearea}}
% \end{center}
%
% \MaybeStop{\PrintIndex}
%
% \section{Implementation}
%
%    \begin{macrocode}
%<*class>
%    \end{macrocode}
%
% \subsection{Class Options}
%
% We use \pkg{l3keys2e} for the options. Using \pkg*{scrkbase} would be nice
% too, but it cannot be used until \KOMAScript{} is available, to the
% emergency fallback to using the standard class \cls*{article} wouldn't make
% sense in this case.
%    \begin{macrocode}
\RequirePackage{l3keys2e}
\ExplSyntaxOn
%    \end{macrocode}
% \begin{option}{indexlatex}
% \changes{v0.3}{2022/01/17}{new option}
% The option to switch on/off the indexing of \LaTeX{} interface and internal
% macros (and also \TeX{} primitives). The pre-setting is \texttt{false}. The
% default of the option is \texttt{true}.
%    \begin{macrocode}
\newif \ifkdoc@indexlatex \kdoc@indexlatexfalse
\keys_define:nn {kdoc}
  {
    indexlatex  .choice:,
    indexlatex / true  .code:n = { \legacy_if_set_true:n  { kdoc@indexlatex } },
    indexlatex / false .code:n = { \legacy_if_set_false:n { kdoc@indexlatex } },
    indexlatex .default:n = { true },
  }
%    \end{macrocode}
% \end{option}
% \begin{macrocode}
\ExplSyntaxOff
\ProcessKeysOptions {kdoc}
%    \end{macrocode}
%
%
% \subsection{Base Class and Packages}
%
% \changes{v0.2}{2022/01/16}{emergency fallback to \cls*{article}}
% \changes{v0.3}{2022/01/17}{new basic defaults}
% \changes{v0.3}{2022/01/17}{\cs{DoNotIndex} of several \LaTeX{} kernel
%   macros}
% \changes{v0.3a}{2022/01/21}{using an old \pkg{doc} is fatal}
% Currently we use base class \cls{ltxdoc} at least version 2021/12/07
% v2.1d. In future this could change. In this case we would need to load
% package \pkg{doc} at least version 2022/06/01 v3.0g. However, we also want
% \cls{ltxdoc} to use \KOMAScript{} class \cls*{scrartcl} instead of standard
% class \cls*{article}. But if \KOMAScript{} has not been made, we cannot use
% a \KOMAScript{} class or package to compile the source. So in this case
% we use an emergency fallback.
%    \begin{macrocode}
\IfFileExists{scrartcl.cls}{%
  \declare@file@substitution{article.cls}{scrartcl.cls}
  \PassOptionsToClass{fontsize=10pt}{scrartcl}
}{%
  \ClassWarningNoLine{koma-script-source-doc}{%
    Usually this class should be used with KOMA-Script\MessageBreak
    scrartcl. But as that class is not available we use\MessageBreak
    standard class article as emergency fallback.\MessageBreak
    It is recommended to repeat this LaTeX run after\MessageBreak
    build/installation of a complete KOMA-Script%
  }%
}
\LoadClassWithOptions{ltxdoc}[2021/12/07]
\IfPackageAtLeastTF{doc}{2022/06/01}{}{%
  \ClassError{koma-script-source-doc}{old package `doc' detected}{%
    This class needs `doc' v3. It cannot be used with\MessageBreak
    `doc' v2. `doc' v3 is available at LaTeX developer\MessageBreak
    release from at least January 2022}%
  \csname fi\endcsname\csname @@end\endcsname\end\endinput
}
\SetupDoc{reportchangedates}
\CodelineIndex
\RecordChanges
\ifkdoc@indexlatex\else
  \DoNotIndex{\.,\\,\ ,\@,\@Alph,\@M}
  \DoNotIndex{\@abstrtfalse,\@abstrttrue,\@addtoreset,\@afterheading}
  \DoNotIndex{\@afterindentfalse,\@alph,\@arabic}
  \DoNotIndex{\@beginparpenalty}
  \DoNotIndex{\@car,\@cdr,\@centercr}
  \DoNotIndex{\@dblfloat,\@dotsep}
  \DoNotIndex{\@dottedtocline,\@empty,\@endparpenalty}
  \DoNotIndex{\@float,\@fontswitch}
  \DoNotIndex{\@gobbletwo}
  \DoNotIndex{\@hangfrom,\@highpenalty}
  \DoNotIndex{\@ifnextchar,\@ifundefined,\@itempenalty}
  \DoNotIndex{\@latex@warning}
  \DoNotIndex{\@m,\@medpenalty,\@minus,\@mkboth,\@mparswitchfalse}
  \DoNotIndex{\@mparswitchtrue}
  \DoNotIndex{\@ne,\@nil,\@nobreakfalse,\@nobreaktrue,\@nomath}
  \DoNotIndex{\@plus}
  \DoNotIndex{\@Roman,\@roman}
  \DoNotIndex{\@tempa,\@tempcnta,\@tempdima,\@tempskipka}
  \DoNotIndex{\@tempswafalse,\@tempswatrue}
  \DoNotIndex{\@tempb,\@tempcntb,\@tempdimb,\@tempskipkb}
  \DoNotIndex{\@tempswbfalse,\@tempswbtrue}
  \DoNotIndex{\@tempc,\@tempcntc,\@tempdimc,\@tempskipkc}
  \DoNotIndex{\@tocrmarg,\@topnewpage,\@topnum,\@twocolumnfalse}
  \DoNotIndex{\@twocolumntrue,\@twosidefalse,\@twosidetrue}
  \DoNotIndex{\@whiledim,\@whilenum}
  \DoNotIndex{\addcontentsline,\addpenalty,\addtocontents,\addtolength}
  \DoNotIndex{\addvspace,\advance,\AtBeginDocument}
  \DoNotIndex{\begin,\begingroup,\bfseries,\box,\bullet}
  \DoNotIndex{\c@figure,\c@page,\c@secnumdepth,\c@table,\c@tocdepth}
  \DoNotIndex{\cdot,\centering,\changes,\cleardoublepage,\clearpage}
  \DoNotIndex{\cmd,\col@number,\CurrentOption,\CodelineIndex,\cs}
  \DoNotIndex{\day,\dblfloatpagefraction,\dbltopfraction}
  \DoNotIndex{\declare@file@substitution}
  \DoNotIndex{\DeclareOldFontCommand,\DeclareOption,\def,\DisableCrossrefs}
  \DoNotIndex{\divide,\DoNotIndex}
  \DoNotIndex{\ifdim,\else,\fi,\empty,\em,\EnableCrossrefs,\end}
  \DoNotIndex{\end@dblfloat}
  \DoNotIndex{\end@float,\endgroup,\endlist,\endquotation,\endtitlepage}
  \DoNotIndex{\everypar,\ExecuteOptions,\expandafter}
  \DoNotIndex{\fboxrule,\fboxsep}
  \DoNotIndex{\g@addto@macro,\gdef,\global}
  \DoNotIndex{\hangindent,\hbox,\hfil,\hrule,\hsize,\hskip,\hspace,\hss}
  \DoNotIndex{\if@tempswa,\ifcase,\or,\fi,\fi}
  \DoNotIndex{\ifnum,\ifodd,\ifx,\fi,\fi,\fi}
  \DoNotIndex{\include,\input,\InputIfFileExists,\item,\itshape}
  \DoNotIndex{\kern,\kernel@ifnextchar}
  \DoNotIndex{\leavevmode,\leftmark,\leftskip,\let,\lineskip}
  \DoNotIndex{\list,\long,\LoadClass,\LoadClassWithOptions}
  \DoNotIndex{\m@ne,\m@th,\marginpar,\markboth,\markright,\mathbf,\mathcal}
  \DoNotIndex{\mathit,\mathnormal,\mathrm,\mathsf,\mathtt,\MessageBreak}
  \DoNotIndex{\month}
  \DoNotIndex{\newblock,\newcommand,\newcount,\newcounter,\newdimen}
  \DoNotIndex{\newenvironment,\newlength,\newpage,\nobreak,\noindent}
  \DoNotIndex{\normalfont,\normallineskip,\normalsize,\null,\number}
  \DoNotIndex{\numberline,\normalcolor}
  \DoNotIndex{\OldMakeindex,\OnlyDescription,\overfullrule}
  \DoNotIndex{\p@,\PackageError,\PackageInfo,\PackageWarningNoLine}
  \DoNotIndex{\pagenumbering,\pagestyle,\par,\paragraph,\parbox}
  \DoNotIndex{\PassOptionsToPackage,\pcal,\penalty,\pmit,\PrintChanges}
  \DoNotIndex{\PrintIndex,\ProcessOptions,\protect,\providecommand}
  \DoNotIndex{\ProvidesClass}
  \DoNotIndex{\raggedbottom,\raggedleft,\raggedright,\refstepcounter,\relax}
  \DoNotIndex{\renewcommand,\RenewDocElement,\RequirePackage}
  \DoNotIndex{\reserved@a,\reserved@b,\reserved@c,\reset@font}
  \DoNotIndex{\rightmargin,\rightmark,\rightskip,\rmfamily}
  \DoNotIndex{\scshape,\secdef,\setbox,\setcounter,\setlength}
  \DoNotIndex{\settowidth,\sfcode,\sffamily,\skip,\sloppy,\slshape,\space}
  \DoNotIndex{\string}
  \DoNotIndex{\TeX,\textbf,\textit,\textrm,\textsf,\texttt,\textup}
  \DoNotIndex{\the,\thispagestyle,\triangleright,\ttfamily}
  \DoNotIndex{\twocolumn,\typeout}
  \DoNotIndex{\undefined,\usecounter}
  \DoNotIndex{\vfil,\vfill,\vspace}
  \DoNotIndex{\wd,\xdef,\year,\z@}
\fi
%    \end{macrocode}
%
% \changes{v0.2}{2022/01/16}{do not fail if \pkg*{typearea} has not been
%   loaded}
% The left margin is highly used, but the right margin is not. So it is a kind
% of \opt{mpinclude} but with the left instead of the right margin. A simple
% solution for this is to move the whole page content to the right. But we do
% so only, if \cls*{koma-script-source-doc} is used with \cls*{scrartcl}.
%    \begin{macrocode}
\ifdefined\AfterCalculatingTypearea
  \AfterCalculatingTypearea{%
    \addtolength{\oddsidemargin}
                {.5\dimexpr\oddsidemargin+1in\relax}%
    \setlength{\marginparwidth}
              {\dimexpr \oddsidemargin+1in-2\marginparsep\relax}%
    \setlength{\marginparpush}{0pt}%
  }
  \KOMAoption{DIV}{9}
\fi
%    \end{macrocode}
%
% Because \pkg{doc} uses a late hook to load \pkg{hyperref} there may be a
% problem with package \pkg{auxhook} used by \pkg{hyperref}. So we load it
% early to avoid such problems.
%    \begin{macrocode}
\RequirePackage{auxhook}
%    \end{macrocode}
%
%
% \begin{macro}{\index@prologue,\glossary@prologue}
% \changes{v0.5}{2022/01/31}{generating ToC entry}
% \begin{macro}{\kssd@section@hack}
% \changes{v0.5}{2022/01/31}{new}
% We want to have an entry to the table of contents for the index and the
% glossary. So we patch the default prologues. This is not a perfect solution,
% but it works and  makes it possible to still define a complete new prologue
% using \cs{IndexPrologue} resp. \cs{GlossaryPrologue} as documented for
% \pkg{doc}.
%    \begin{macrocode}
\expandafter\def\expandafter\index@prologue\expandafter{%
  \expandafter\kssd@section@hack\index@prologue}
\expandafter\def\expandafter\glossary@prologue\expandafter{%
  \expandafter\kssd@section@hack\glossary@prologue}
\newcommand*{\kssd@section@hack}{%
  \let\ksdd@markboth\markboth
  \def\markboth##1##2{%
    \@ifundefined{addsectiontocentry}{%
      \@ifundefined{addxcontentsline}{%
        \addcontentsline{toc}{section}{\numberline{}##1}%
      }{%
        \addxcontentsline{toc}{section}{##1}%
      }%
    }{%
      \addsectiontocentry{}{##1}%
    }%
    \let\markboth\ksdd@markboth
    \markboth{##1}{##2}%
  }%
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
%
% \subsection{Simple Formatting Macros}
%
% These are very simply defined macros for names of
% \begin{command}{\file}
% files,
%    \begin{macrocode}
\newcommand*{\file}{\texttt}
%    \end{macrocode}
% \begin{command}{\cls}
% \changes{v0.8}{2022/02/08}{using \cs{textsf}}
% \changes{v0.9}{2022/02/09}{using \cs{pkg} for automatic link generation}
% classes,
%    \begin{macrocode}
\newcommand*{\cls}{\pkg}
%    \end{macrocode}
% \begin{command}{\pkg}
% \changes{v0.8}{2022/02/08}{using \cs{textsf}}
% \changes{v0.9}{2022/02/09}{automatic link generation}
% packages (note: we cannot use \cs{ExplSyntaxOn}/\cs{ExplSyntaxOff}, because
% \cs{href} would generate a file link),
%    \begin{macrocode}
\NewDocumentCommand{\pkg}{sO{https://www.ctan.org/pkg/#3}m}{%
  \IfBooleanTF{#1}{\@gobble}{%
    \csname tl_if_blank:nTF\endcsname{#2}{\@gobble}{\href}%
  }%
  {#2}{\textsf{#3}}%
}
%    \end{macrocode}
% \begin{command}{\opt}
% options,
%    \begin{macrocode}
\newcommand*{\opt}{\texttt}
%    \end{macrocode}
% \begin{command}{\optvalue}
% option values,
%    \begin{macrocode}
\newcommand*{\optvalue}{\texttt}
%    \end{macrocode}
% \begin{command}{\env}
% environments,
%    \begin{macrocode}
\newcommand*{\env}{\texttt}
%    \end{macrocode}
% \begin{command}{\len}
% \changes{v0.6}{2022/02/02}{added}
% lengths,
%    \begin{macrocode}
\newcommand*{\len}{\cs}
%    \end{macrocode}
% \begin{command}{\cnt}
% counters,
%    \begin{macrocode}
\newcommand*{\cnt}{\texttt}
%    \end{macrocode}
% \begin{command}{\fnt}
% fonts,
%    \begin{macrocode}
\newcommand*{\fnt}{\texttt}
%    \end{macrocode}
% \begin{command}{\var}
% \changes{v0.6}{2022/02/02}{added}
% variables,
%    \begin{macrocode}
\newcommand*{\var}{\texttt}
%    \end{macrocode}
% \begin{command}{\plen}
% \changes{v0.6}{2022/02/02}{added}
% pseudo-lengths,
%    \begin{macrocode}
\newcommand*{\plen}{\texttt}
%    \end{macrocode}
% \begin{command}{\pstyle}
% \changes{v0.8}{2022/02/08}{added}
% page styles,
%    \begin{macrocode}
\newcommand*{\pstyle}{\texttt}
%    \end{macrocode}
% \begin{command}{\dhook}
% \changes{v0.91}{2022/03/10}{added}
% do hooks.
%    \begin{macrocode}
\newcommand*{\dhook}{\texttt}
%    \end{macrocode}
% \end{command}
% \end{command}
% \end{command}
% \end{command}
% \end{command}
% \end{command}
% \end{command}
% \end{command}
% \end{command}
% \end{command}
% \end{command}
% \end{command}
% \end{command}
%
%
% \subsection{Documentation Items}
% \label{sec:documentationitems}
%
% \KOMAScript{} has several additional items beside macros and environments.
% The old \cls*{scrdoc} class provides macros, environments, options, lengths,
% counters, variables and fonts. But now we also distinguish internal macros
% vs. users commands and internal lengths vs. user lengths. In this
% documentation we additionally provide documentation items.
%
% \begin{docitem}{Macro}
% \begin{command}{\DescribeMacro}
% \begin{environment}{macro}
% An internal macro.
%    \begin{macrocode}
\RenewDocElement[%
  macrolike = true,
  toplevel  = false,
  idxtype   = ,
  idxgroup  = TeX macros (internal)\actualchar\TeX{} macros (internal),
  printtype = \textit{intern}
]{Macro}{macro}
%    \end{macrocode}
% \end{environment}
% \end{command}
% \end{docitem}
%
% \begin{docitem}{Command}
% \begin{command}{\DescribeCommand}    
% \begin{environment}{command}
% User command.
%    \begin{macrocode}
\NewDocElement[%
  macrolike = true,
  toplevel  = true,
  idxtype   = ,
  idxgroup  = Commands,
  printtype = ,
]{Command}{command}
%    \end{macrocode}
% \end{environment}
% \end{command}
% \end{docitem}
%
% \begin{docitem}{Env}
% \begin{command}{\DescribeEnv}    
% \begin{environment}{environment}
% Environments.
%    \begin{macrocode}
\RenewDocElement[%
  macrolike = false,
  toplevel  = true,
  idxtype   = \textit{env.} ,
  idxgroup  = Environments,
  printtype = \textit{env.}
]{Env}{environment}
%    \end{macrocode}
% \end{environment}
% \end{command}
% \end{docitem}
%
% \begin{docitem}{Option}
% \begin{command}{\DescribeOption}
% \begin{environment}{option}
% Options.
%    \begin{macrocode}
\NewDocElement[%
  macrolike = false,
  toplevel  = true,
  idxtype   = \textit{opt.},
  idxgroup  = Options,
  printtype = \textit{opt.}
]{Option}{option}
%    \end{macrocode}
% \end{environment}
% \end{command}
% \end{docitem}
%
% \begin{docitem}{ILength}
% \begin{command}{\DescribeILength}
% \begin{environment}{ilength}
% An internal length.
%    \begin{macrocode}
\NewDocElement[%
  macrolike = true,
  toplevel  = false,
  idxtype   = ,
  idxgroup  = Lengths (internal),
  printtype = \textit{ilen.}
]{ILength}{ilength}
%    \end{macrocode}
% \end{environment}
% \end{command}
% \end{docitem}
%
% \begin{docitem}{Length}
% \begin{command}{\DescribeLength}
% \begin{environment}{length}
% User length.
%    \begin{macrocode}
\NewDocElement[%
  macrolike = true,
  toplevel  = true,
  idxtype   = \textit{len.},
  idxgroup  = Lengths (user),
  printtype = \textit{len.},
]{Length}{length}
%    \end{macrocode}
% \end{environment}
% \end{command}
% \end{docitem}
%
% \begin{docitem}{Counter}
% \begin{command}{\DescribeCounter}
% \begin{environment}{counter}
% User counter.
%    \begin{macrocode}
\NewDocElement[%
  macrolike = false,
  toplevel  = true,
  idxtype   = \textit{cnt.},
  idxgroup  = Counters,
  printtype = \textit{cnt.},
]{Counter}{counter}
%    \end{macrocode}
% \end{environment}
% \end{command}
% \end{docitem}
%
% \begin{docitem}{KOMAfont}
% \begin{command}{\DescribeKOMAfont}
% \begin{environment}{fontelement}
% \KOMAScript{} font element
%    \begin{macrocode}
\NewDocElement[%
  macrolike = false,
  toplevel  = true,
  idxtype   = \textit{font},
  idxgroup  = KOMA-Script font elements\actualchar\KOMAScript{} font elements,
  printtype = \textit{font},
]{KOMAfont}{fontelement}
%    \end{macrocode}
% \end{environment}
% \end{command}
% \end{docitem}
%
% \begin{docitem}{KOMAvar}
% \begin{command}{\DescribeKOMAvar}
% \begin{environment}{variable}
% \KOMAScript{} variable (used by \cls*{scrlttr2} and \pkg*{scrletter}).
%    \begin{macrocode}
\NewDocElement[%
  macrolike = false,
  toplevel  = true,
  idxtype   = \textit{var.},
  idxgroup  = KOMA-Script variables\actualchar\KOMAScript{} variables,
  printtype = \textit{var.},
]{KOMAvar}{variable} 
%    \end{macrocode}
% \end{environment}
% \end{command}
% \end{docitem}
%
% \begin{docitem}{PLength}
% \changes{v0.6}{2022/02/02}{added}
% \begin{command}{\DescribePLength}
% \changes{v0.6}{2022/02/02}{added}
% \begin{environment}{peudolength}
% \changes{v0.6}{2022/02/02}{added}
% \KOMAScript{} pseudo-lengths (used by \cls*{scrlttr2} and \pkg*{scrletter}).
%    \begin{macrocode}
\NewDocElement[%
  macrolike = false,
  toplevel  = true,
  idxtype   = \textit{plen.},
  idxgroup  = KOMA-Script pseudo-lengths\actualchar\KOMAScript{} pseudo-lengths,
  printtype = \textit{plen.},
]{PLength}{pseudolength} 
%    \end{macrocode}
% \end{environment}
% \end{command}
% \end{docitem}
%
% \begin{docitem}{PageStyle}
% \changes{v0.8}{2022/02/08}{added}
% \begin{command}{\DescribePageStyle}
% \changes{v0.8}{2022/02/08}{added}
% \begin{environment}{pgstyle}
% \changes{v0.8}{2022/02/08}{added}
% Page style.
%    \begin{macrocode}
\NewDocElement[%
  macrolike = false,
  toplevel  = true,
  idxtype   = \textit{pgstyle},
  idxgroup  = page styles,
  printtype = \textit{style}
]{PageStyle}{pgstyle}
%    \end{macrocode}
% \end{environment}
% \end{command}
% \end{docitem}
%
% \begin{docitem}{DoHook}
% \changes{v0.91}{2022/03/10}{added}
% \begin{command}{\DescribeDoHook}
% \changes{v0.91}{2022/03/10}{added}
% \begin{environment}{dohook}
% \changes{v0.91}{2022/03/10}{added}
% Page style.
%    \begin{macrocode}
\NewDocElement[%
  macrolike = false,
  toplevel  = true,
  idxtype   = \textit{do hook},
  idxgroup  = do hooks,
  printtype = \textit{dohook}
]{DoHook}{dohook}
%    \end{macrocode}
% \end{environment}
% \end{command}
% \end{docitem}
%
%    \begin{macrocode}
%</class>
%    \end{macrocode}
%
% \Finale
% \PrintChanges
%
\endinput
% Local Variables:
% mode: doctex
% ispell-local-dictionary: "en_US"
% eval: (flyspell-mode 1)
% TeX-master: t
% TeX-engine: luatex-dev
% eval: (setcar (or (cl-member "Index" (setq-local TeX-command-list (copy-alist TeX-command-list)) :key #'car :test #'string-equal) (setq-local TeX-command-list (cons nil TeX-command-list))) '("Index" "mkindex %s" TeX-run-index nil t :help "makeindex for dtx"))
% End:
