%\RequirePackage[enable-debug]{expl3}[2018/06/14]
\ProvidesExplPackage {tagpdfdocu-patches} {2024-09-16} {0.99f}
 {patches/commands for the tagpdf documentation}
\RequirePackage{etoolbox,xpatch}

%Logos
% only spacing changes:
\ExplSyntaxOn
\DeclareRobustCommand\TeX{
  \leavevmode
     T\kern-.1667em\lower.5ex\hbox{E}\kern-.05emX\@ %changed from -.125em
   }
\DeclareRobustCommand{\LaTeX}{
        \leavevmode
        L\kern-.25em % %changed from -0.36em
        \sbox\z@ T%
         \vbox to\ht\z@{\hbox{\check@mathfonts
                              \fontsize\sf@size\z@
                              \math@fontsfalse\selectfont
                              A}%
                        \vss}%
        \kern-.1em % %changed from 0.15em
        T\kern-.1667em\lower.5ex\hbox{E}\kern-.05emX\@ %changed from -0.125
    }
  
% minisec, correct tagging is still unclear.  
\newcommand\minisec[1]{%
    \if@noskipsec \leavevmode \fi
    \par
    \@afterindentfalse
    \if@nobreak
      \everypar{}%
    \else
      \addpenalty\@secpenalty\addvspace{1.5ex}%
    \fi
  {\tagpdfsetup{para/maintag=P,para/tag=Strong}\parindent \z@    
   \setlength{\parfillskip}{\z@ plus 1fil}%
    \raggedright\normalfont\bfseries\nobreak
    \nobreak\interlinepenalty \@M #1\par\nobreak%
  }\nobreak
  \@afterheading
}                    

% listings. Unclear how to make it work for the original lstlisting, so we make a 
% copy taglstlisting for now
\DeclareInstance{blockenv}{lstlisting}{display}
{
  env-name       = lstlisting,
  tag-name       = verbatim,
  tag-class      = ,
  tagging-recipe = standard,
  inner-level-counter  = ,
  level-increase = false,
  setup-code     = ,
  block-instance = displayblock ,
  inner-instance = ,
  final-code     =  \tl_set:Nn \l__tag_para_main_tag_tl {codeline}\tagtool{paratag=Code},
}

\lstnewenvironment{taglstlisting}[2][]{%
     \UseInstance{blockenv}{lstlisting} {}
     \lst@TestEOLChar{#2}%
     \lstset{#1}%
     \csname\@lst @SetFirstNumber\endcsname%
   }{%
     \@nobreakfalse
     \csname\@lst @SaveFirstNumber\endcsname%
     \endblockenv
   }
      
% ======== marginnote ==========
% 2024-03-23 currently marginnote is no longer used, we use marginpar
% TODO marginnote has a bug (a \par is missing) so it messes up tagging.
% but currently unneeded as we marked them up as artifacts anyway as they don't contain
% meaningful contents
%\renewcommand*{\mn@parboxrestore}{\tagpdfparaOff}%

%\NewDocumentCommand\sidenote{m}
% {%
%   %\tag_mc_artifact_group_begin:n{notype}\tagpdfparaOff\marginnote{#1}\tag_mc_artifact_group_end:
%   \marginpar{#1}%
% }

\ExplSyntaxOff

%======== tcolorbox ========
% We switch of paratagging at the begin and reenable it locally in before upper.
% the before upper setting is dangerous as it can be overwritten by
% users. So a more stable hook is needed.
% we force also a \par and add a div structure, to avoid clashes with the block
% tagging code. This needs revisiting!

\AddToHook{env/tcolorbox/before}{\par\tagstructbegin{tag=Div}}
\AddToHook{env/tcolorbox/begin}{\tagpdfparaOff \tcbset{before upper=\tagpdfparaOn}}
\AddToHook{env/tcolorbox/after}{\par\tagstructend}

% ========= doc Commands from tcolorbox
% Not sure if this is generally usable but one must avoid tagstop if there can
% be a pagebreak 
\DeclareInstance{blockenv}{docCommand}{display}
{
  env-name       = docCommand,
  tag-name       = Div,
  tag-class      = ,
  tagging-recipe = standalone,
  inner-level-counter  = ,
  level-increase = false,
  setup-code     = ,
  block-instance = displayblock ,
}

\RenewDocumentEnvironment{tcb@manual@entry}{}
    {\UseInstance{blockenv}{docCommand} 
      {tag-name=Div,
       leftmargin=\kvtcb@doc@left,
       rightmargin=\kvtcb@doc@right,
       }%
     \tagtool{para=false}% 
     \AssignSocketPlug{tagsupport/minipage/before}{noop}
     \AssignSocketPlug{tagsupport/minipage/after}{noop}      
     \AssignSocketPlug{tagsupport/parbox/before}{noop}
     \AssignSocketPlug{tagsupport/parbox/after}{noop}  
    }   
    {\endblockenv } 

\tcbset{
 doc head command=
   {before upper=\tagstructbegin{tag=Code}\tagmcbegin{},
    after upper=\tagmcend\tagstructend},
 }
 
 

% ======= footnote ========
% done in testphase code

% ====== hyperref ========
% this should probably go into tagpdf, but it is related to
% problem of pdf strings and context ....

\AddToHook{package/hyperref/after}
 {%
  \pdfstringdefDisableCommands{%
   \let\tagstructbegin\@gobble
   \let\tagmcbegin\@gobble
   \let\tagmcend\relax
   \let\tagstructend\relax
 }}{}

%====== tikz picture =======
% first draft to tag. The main problem is to handle paragraphs. One 
\ExplSyntaxOn
\cs_new_protected:Npn\__tag_tikz_savepos:n #1
 {
  \tex_savepos:D 
  \tikz@resetexpandcount%
  \tikz@scan@one@point\pgfutil@firstofone(current~bounding~box.north~east)\relax
  \pgf@pos@transform{\pgf@x}{\pgf@y}%
  \property_record:nn{#1}{xpos,ypos,abspage}
  \property_record:nn{#1-tr}{pgfx,pgfy}
  \tikz@scan@one@point\pgfutil@firstofone(current~bounding~box.south~west)\relax
  \pgf@pos@transform{\pgf@x}{\pgf@y}%
  \property_record:nn{#1-bl}{pgfx,pgfy}
  \tex_savepos:D 
 }
\cs_generate_variant:Nn \__tag_tikz_savepos:n {e}
 
\NewProperty{pgfx}{now}{0}
 {
   \dim_compare:nNnTF {\dim_abs:n {\pgf@x}} > {15999pt} 
    { 0 }
    { \dim_to_decimal_in_sp:n{\pgf@x} } 
 }  
\NewProperty{pgfy}{now}{0}
 {
   \dim_compare:nNnTF {\dim_abs:n {\pgf@y}} > {15999pt} 
    { 0 }
    { \dim_to_decimal_in_sp:n{\pgf@y} } 
 }  

\cs_new_protected:Npn \__tag_tikz_getbbox:
 {
   \int_gincr:N\g__tag_graphic_int
   \tl_set:Ne\l__tag_graphic_currentlabel_tl {__tag_graphic_\int_use:N \g__tag_graphic_int}
   \tl_gset:Ne\g__tag_graphic_lx_tl
     {
       \dim_to_decimal_in_bp:n 
         {   \property_ref:een {\l__tag_graphic_currentlabel_tl}{xpos}{0}sp 
           + \property_ref:een {\l__tag_graphic_currentlabel_tl-bl}{pgfx}{0}sp  
         }
     }  
   \tl_gset:Ne\g__tag_graphic_ly_tl
        {
          \dim_to_decimal_in_bp:n 
            { \property_ref:een {\l__tag_graphic_currentlabel_tl}{ypos}{0}sp 
              + \property_ref:een {\l__tag_graphic_currentlabel_tl-bl}{pgfy}{0}sp
            }
        } 
   \tl_gset:Ne\g__tag_graphic_ux_tl
     {
       \dim_to_decimal_in_bp:n 
         {   \property_ref:een {\l__tag_graphic_currentlabel_tl}{xpos}{0}sp 
           + \property_ref:een {\l__tag_graphic_currentlabel_tl-tr}{pgfx}{0}sp  
         }
     }
   \tl_gset:Ne\g__tag_graphic_uy_tl
     {
       \dim_to_decimal_in_bp:n 
         {   \property_ref:een {\l__tag_graphic_currentlabel_tl}{ypos}{0}sp 
           + \property_ref:een {\l__tag_graphic_currentlabel_tl-tr}{pgfy}{0}sp  
         }
     }  
  }

\cs_new_protected:Npn \__tag_graphic_tikz_begin_picture:
 {
  \tag_mc_end_push:
  \bool_if:NTF \l__tag_graphic_artifact_bool
   { \tagmcbegin{artifact} }
   {   
     \__tag_tikz_getbbox:
     \tagstructbegin{tag=Figure,alt=\l__tag_graphic_alt_tl}\tagmcbegin{}
     \__tag_prop_gput:cne
         { g__tag_struct_\int_eval:n {\c@g__tag_struct_abs_int}_prop }
         { A } 
         {
           << 
             /O /Layout /BBox~
             [
              \g__tag_graphic_lx_tl\c_space_tl
              \g__tag_graphic_ly_tl\c_space_tl
              \g__tag_graphic_ux_tl\c_space_tl
              \g__tag_graphic_uy_tl
             ]
           >>   
         }
    \bool_if:NT\l__tag_graphic_debug_bool
     {
       \__tag_graphic_show_bbox:VVVVne
        \g__tag_graphic_lx_tl
        \g__tag_graphic_ly_tl
        \g__tag_graphic_ux_tl
        \g__tag_graphic_uy_tl
        {red}
        {\int_use:N\g__tag_graphic_int}
      }
    }      
    \SuspendTagging{tikz}      
  }

\cs_new_protected:Npn \__tag_graphic_tikz_end_picture:
 {
   \ResumeTagging{tikz}\tagmcend
   \bool_if:NF \l__tag_graphic_artifact_bool
     {
       \tagstructend
       \__tag_tikz_savepos:e {__tag_graphic_\int_use:N \g__tag_graphic_int}
     }
   \tag_mc_begin_pop:n{}
 }
 
\tikzset
 {
   every~picture/.style=
    {
     artifact,
     execute~at~begin~picture=\__tag_graphic_tikz_begin_picture:, 
     execute~at~end~picture=\__tag_graphic_tikz_end_picture:
    }
 }
\AddToHook{env/tikzpicture/before}{\leavevmode} 
 
\tikzset
 {
   alt/.code= 
     {
       \bool_set_false:N \l__tag_graphic_artifact_bool
       \tl_set:Nn \l__tag_graphic_alt_tl{#1}
     } 
 } 
\tikzset
 {
   artifact/.code= 
    \bool_set_true:N \l__tag_graphic_artifact_bool
 } 

\ExplSyntaxOff





\endinput