% \iffalse meta-comment
% ======================================================================
% scrkernel-tagging.dtx
% Copyright (c) Markus Kohm, 2026
%
% 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.
% ======================================================================
%%% From File: $Id: scrkernel-tagging.dtx 4032 2023-04-17 09:45:11Z kohm $
%<init>%%%            (run: init)
%<verylate>%%%            (run: verylate)
%<*dtx>
\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
\begingroup
  \def\filedate$#1: #2-#3-#4 #5${\gdef\filedate{#2/#3/#4}}
  \filedate$Date: 2023-04-17 11:45:11 +0200 (Mo, 17. Apr 2023) $
  \def\filerevision$#1: #2 ${\gdef\filerevision{r#2}}
  \filerevision$Revision: 4032 $
  \edef\reserved@a{%
    \noexpand\endgroup
    \noexpand\ProvidesFile{scrkernel-tagging.dtx}%
                          [\filedate\space\filerevision\space
                           KOMA-Script source
                           (tagging)]%
  }%
\reserved@a
\documentclass[USenglish]{koma-script-source-doc}
\usepackage{babel}
\setcounter{StandardModuleDepth}{2}
\begin{document}
\DocInput{scrkernel-tagging.dtx}
\end{document}
%</dtx>
% \fi
%
% \changes{v3.49.3}{2026/06/16}{new}
%
% \GetFileInfo{scrkernel-tagging.dtx}
% \title{Preparation for PDF Tagging}
% \author{\href{mailto:komascript@gmx.info}{Markus Kohm}}
% \date{Revision \fileversion{} of \filedate}
% \maketitle
% \begin{abstract}
%   \filename{} is used by generation of classes and packages for PDF tagging.
%   Note, that currently the file itself does not contain any code for PDF
%   tagging but for detection of PDF tagging and automatic loading of external
%   files if those are available.
% \end{abstract}
% \tableofcontents
%
% \section{User Manual}
%
% Currently not available.
%
% \MaybeStop{\PrintIndex}
%
% \section{Implementation of the Detection of Usage of Meta Data or Tagging}
%
% \changes{v3.49}{2025/09/11}{tagging warning added}
% \ExplSyntaxOn
% \begin{macro}{
%   \komascript_tagging_test:,
%   \komascript_documentmetadata_test:
% }
%   \ExplSyntaxOff
%   \changes{v3.49.3}{2026/06/13}{meta data error added}
%   \changes{v3.49.3}{2026/06/16}{moved to from
%     \file{scrkernel-miscellaneous.dtx}}
%   \changes{v3.49.3}{2026/06/16}{message module name expansion added}
%   In future \KOMAScript{} classes should support tagging, but currently they
%   don't. So if tagging is enabled, we warn. I expect the tagging support to
%   be added step by step. So the warning here will also change step by
%   step. However the name of the message used to warn, will not change. So
%   packages can add tagging support and also deactivate the message using
%\begin{verbatim}
%\msg_redirect_name:nnn { \KOMAClassName } { tagging-not-supported } { none }
%\end{verbatim}
%   As an alternative packages (and wrapper classes) can change the test and
%   messages by defining \cs{komascript_documentmetadata_test:}
%   resp. \cs{komascript_tagging_test:} before loading the \KOMAScript{}
%   class.
%    \begin{macrocode}
%<*class>
\ExplSyntaxOn
%<*init>
\cs_if_exist:NF \komascript_documentmetadata_test:
  {
    \exp_args:NV \msg_new:nnn \KOMAClassName { metadata-not-supported }
      {
        \token_to_str:N\DocumentMetadata\ not~supported!\\
        Note:~This~class~currently~does~not~support~usage~of~
        \token_to_str:N\DocumentMetadata.\\
        Instead~of~using~\token_to_str:N\DocumentMetadata\ you~should~
        currently~use:\\
        \ \ \token_to_str:N\RequirePackage{pdfmanagement}\\
        \ \ \token_to_str:N\SetKeys[document/metadata]{...}\\
        before~\token_to_str:N\documentclass.
      }
    \cs_new:Npn \komascript_documentmetadata_test:
      {
        \cs_if_exist:NT \IfDocumentMetadataT
          {
            \IfDocumentMetadataT
              {
                \exp_args:NV \msg_fatal:nn \KOMAClassName
                  { metadata-not-supported }
              }
          }
      }
  }
%</init>
%    \end{macrocode}
%   \begin{description}
%   \item[Important note:] The following code of the test, i.e., with loading
%     external tagging code from a package or file is very provisionally. It
%     will be replaced soon by something completely different!
%   \end{description}
%    \begin{macrocode}
%<*verylate>   
\IfDocumentMetadataT
  {
    \IfFileExists
      {\KOMAClassName-tagging.sty}
      {
        \RequirePackage
          {\KOMAClassName-tagging}
      }
      {
        \InputIfFileExists
          {\KOMAClassName-tagging-code.tex}
          {}
          {\komascript_documentmetadata_test:}
      }
  }
%</verylate> 
%<*init> 
\cs_if_exist:NF \komascript_tagging_test:
  {
    \cs_new:Npn \komascript_tagging_test:
      {
        \cs_if_exist:NT \tag_if_active:T
          {
            \exp_args:NV \msg_new:nnn \KOMAClassName { tagging-not-supported }
              {
                Activated~tagging~detected~but~not~supported!\\
                Note:~This~class~currently~does~not~actively~support~tagging.~
                This~means:~Several~elements~will~not~be~tagged~correctly~
                and~also~several~errors~could~happen.\\
                Sorry!
              }
            \hook_gput_code:nnn { begindocument } { \KOMAClassName }
              {
                \tag_if_active:T
                  {
                    \exp_args:NV \msg_warning:nn
                      \KOMAClassName
                      { tagging-not-supported }
                  }
              }
          }
      }
  }
%</init>
%<verylate>\komascript_tagging_test:
\ExplSyntaxOff
%</class>
%    \end{macrocode}
% \end{macro}
% \ExplSyntaxOff
%
% \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:
