texlive[68676] Master/texmf-dist: tagpdf (27oct23)

commits+karl at tug.org commits+karl at tug.org
Fri Oct 27 21:58:22 CEST 2023


Revision: 68676
          https://tug.org/svn/texlive?view=revision&revision=68676
Author:   karl
Date:     2023-10-27 21:58:21 +0200 (Fri, 27 Oct 2023)
Log Message:
-----------
tagpdf (27oct23)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/tagpdf/README.md
    trunk/Master/texmf-dist/doc/latex/tagpdf/ex-AF-file.pdf
    trunk/Master/texmf-dist/doc/latex/tagpdf/ex-alt-actualtext.pdf
    trunk/Master/texmf-dist/doc/latex/tagpdf/ex-attribute.pdf
    trunk/Master/texmf-dist/doc/latex/tagpdf/ex-formula-problem.pdf
    trunk/Master/texmf-dist/doc/latex/tagpdf/ex-list.pdf
    trunk/Master/texmf-dist/doc/latex/tagpdf/ex-mc-manual-para-split-obsolete.pdf
    trunk/Master/texmf-dist/doc/latex/tagpdf/ex-softhyphen.pdf
    trunk/Master/texmf-dist/doc/latex/tagpdf/ex-spaceglyph-listings.pdf
    trunk/Master/texmf-dist/doc/latex/tagpdf/ex-structure-obsolete.pdf
    trunk/Master/texmf-dist/doc/latex/tagpdf/ex-tagpdf-template.pdf
    trunk/Master/texmf-dist/doc/latex/tagpdf/tagpdf-code.pdf
    trunk/Master/texmf-dist/doc/latex/tagpdf/tagpdf.pdf
    trunk/Master/texmf-dist/doc/latex/tagpdf/tagpdf.tex
    trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-backend.dtx
    trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-checks.dtx
    trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-data.dtx
    trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-generic.dtx
    trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-luacode.dtx
    trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-shared.dtx
    trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-roles.dtx
    trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-space.dtx
    trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-struct.dtx
    trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-tree.dtx
    trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-user.dtx
    trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf.dtx
    trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf.ins
    trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-base.sty
    trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-debug-generic.sty
    trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-debug-lua.sty
    trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-debug.sty
    trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-luatex.def
    trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-generic.sty
    trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-lua.sty
    trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-latex-book.def
    trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-latex-inline.def
    trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-latex.def
    trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-mathml.def
    trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-pdf.def
    trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-pdf2.def
    trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-parent-child-2.csv
    trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-parent-child.csv
    trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf.lua
    trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf.sty
    trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdfdocu-patches.sty

Modified: trunk/Master/texmf-dist/doc/latex/tagpdf/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tagpdf/README.md	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/doc/latex/tagpdf/README.md	2023-10-27 19:58:21 UTC (rev 68676)
@@ -1,6 +1,6 @@
 #tagpdf — A package to create tagged pdf
-Packageversion: 0.98l 
-Packagedate: 2023/08/30
+Packageversion: 0.98m 
+Packagedate: 2023/10/27
 Author: Ulrike Fischer
 
 ## License

Modified: trunk/Master/texmf-dist/doc/latex/tagpdf/ex-AF-file.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tagpdf/ex-alt-actualtext.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tagpdf/ex-attribute.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tagpdf/ex-formula-problem.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tagpdf/ex-list.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tagpdf/ex-mc-manual-para-split-obsolete.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tagpdf/ex-softhyphen.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tagpdf/ex-spaceglyph-listings.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tagpdf/ex-structure-obsolete.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tagpdf/ex-tagpdf-template.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tagpdf/tagpdf-code.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tagpdf/tagpdf.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tagpdf/tagpdf.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tagpdf/tagpdf.tex	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/doc/latex/tagpdf/tagpdf.tex	2023-10-27 19:58:21 UTC (rev 68676)
@@ -16,8 +16,8 @@
  }
 \DebugBlocksOff
 \makeatletter
-\def\UlrikeFischer at package@version{0.98l}
-\def\UlrikeFischer at package@date{2023-08-30}
+\def\UlrikeFischer at package@version{0.98m}
+\def\UlrikeFischer at package@date{2023-10-27}
 \makeatother
 
 \documentclass[bibliography=totoc,a4paper]{article}

Modified: trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-backend.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-backend.dtx	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-backend.dtx	2023-10-27 19:58:21 UTC (rev 68676)
@@ -47,13 +47,13 @@
 %    }^^A
 % }
 %
-% \date{Version 0.98l, released 2023-08-30}
+% \date{Version 0.98m, released 2023-10-27}
 % \maketitle
 % \begin{implementation}
 %    \begin{macrocode}
 %<@@=tag>
 %<*luatex>
-\ProvidesExplFile {tagpdf-luatex.def} {2023-08-30} {0.98l}
+\ProvidesExplFile {tagpdf-luatex.def} {2023-10-27} {0.98m}
   {tagpdf~driver~for~luatex}
 %    \end{macrocode}
 % \section{Loading the lua}
@@ -158,8 +158,8 @@
 
 local ProvidesLuaModule = {
     name          = "tagpdf",
-    version       = "0.98l",       --TAGVERSION
-    date          = "2023-08-30", --TAGDATE
+    version       = "0.98m",       --TAGVERSION
+    date          = "2023-10-27", --TAGDATE
     description   = "tagpdf lua code",
     license       = "The LATEX Project Public License 1.3c"
 }

Modified: trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-checks.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-checks.dtx	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-checks.dtx	2023-10-27 19:58:21 UTC (rev 68676)
@@ -48,7 +48,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.98l, released 2023-08-30}
+% \date{Version 0.98m, released 2023-10-27}
 % \maketitle
 % \begin{documentation}
 % \section{Commands}
@@ -313,7 +313,7 @@
 %    \begin{macrocode}
 %<@@=tag>
 %<*header>
-\ProvidesExplPackage {tagpdf-checks-code} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-checks-code} {2023-10-27} {0.98m}
  {part of tagpdf - code related to checks, conditionals, debugging and messages}
 %</header>
 %    \end{macrocode}
@@ -717,7 +717,7 @@
 \cs_new_protected:Npn \@@_check_struct_used:n #1 %#1 label
   {
     \prop_get:cnNT
-      {g_@@_struct_\@@_ref_value:enn{tagpdfstruct-#1}{tagstruct}{unknown}_prop}
+      {g_@@_struct_\@@_property_ref:enn{tagpdfstruct-#1}{tagstruct}{unknown}_prop}
       {P}
       \l_@@_tmpa_tl
       {
@@ -884,7 +884,7 @@
   {
     \tl_set:Nx \l_@@_tmpa_tl
       {
-        \@@_ref_value_lastpage:nn
+        \@@_property_ref_lastpage:nn
           {abspage}
           {-1}
       }
@@ -898,7 +898,7 @@
           {1}
           {1}
           {
-            \@@_ref_value_lastpage:nn
+            \@@_property_ref_lastpage:nn
               {tagmcabs}
               {-1}
           }
@@ -905,7 +905,7 @@
           {
             \int_compare:nT
               {
-                \@@_ref_value:enn
+                \@@_property_ref:enn
                   {mcid-####1}
                   {tagabspage}
                   {-1}
@@ -916,7 +916,7 @@
                \seq_gput_right:Nx \l_tmpa_seq
                  {
                    Page##1-####1-
-                   \@@_ref_value:enn
+                   \@@_property_ref:enn
                      {mcid-####1}
                      {tagmcid}
                      {-1}

Modified: trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-data.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-data.dtx	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-data.dtx	2023-10-27 19:58:21 UTC (rev 68676)
@@ -47,7 +47,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.98l, released 2023-08-30}
+% \date{Version 0.98m, released 2023-10-27}
 % \maketitle
 % \begin{documentation}
 % This files contains a various data files which are read in
@@ -60,7 +60,7 @@
 % It lists the new tag, the rolemap and the namespace of the rolemap.
 %    \begin{macrocode}
 %<*ns-latex>
-%% \ProvidesExplFile {tagpdf-ns-latex.def} {2023-08-30} {0.98l}
+%% \ProvidesExplFile {tagpdf-ns-latex.def} {2023-10-27} {0.98m}
 %% {latex} {https://www.latex-project.org/ns/dflt/2022}{}
 title,        Title,    pdf2,
 part,         Title,    pdf2,
@@ -92,7 +92,7 @@
 % It is bound to change
 %    \begin{macrocode}
 %<*ns-latex-book>
-%% \ProvidesExplFile {tagpdf-ns-latex-book.def} {2023-08-30} {0.98l}
+%% \ProvidesExplFile {tagpdf-ns-latex-book.def} {2023-10-27} {0.98m}
 %% {latex-book} {https://www.latex-project.org/ns/book/2022}{}
 chapter,       H1,pdf2,
 section,       H2,pdf2,
@@ -108,7 +108,7 @@
 % loaded. 
 %    \begin{macrocode}
 %<*ns-latex-inline>
-%% \ProvidesExplFile {tagpdf-ns-latex-inline.def} {2023-08-30} {0.98l}
+%% \ProvidesExplFile {tagpdf-ns-latex-inline.def} {2023-10-27} {0.98m}
 %% {latex-inline} {https://www.latex-project.org/ns/inline/2022}{}
 chapter,       Span, pdf2,    
 section,       Span, pdf2,
@@ -122,7 +122,7 @@
 % \section{The pdf namespace data}
 %    \begin{macrocode}
 %<*ns-pdf>
-%% \ProvidesExplFile {tagpdf-ns-pdf.def} {2023-08-30} {0.98l}
+%% \ProvidesExplFile {tagpdf-ns-pdf.def} {2023-10-27} {0.98m}
 %%  {pdf}   {http://iso.org/pdf/ssn}{}
 StructTreeRoot,StructTreeRoot,pdf,D,
 Document,Document,pdf,D,   
@@ -190,7 +190,7 @@
 % \section{The pdf 2.0 namespace data}
 %    \begin{macrocode}
 %<*ns-pdf2>
-%% \ProvidesExplFile {tagpdf-ns-pdf2.def} {2023-08-30} {0.98l} 
+%% \ProvidesExplFile {tagpdf-ns-pdf2.def} {2023-10-27} {0.98m} 
 %%  {pdf2}  {http://iso.org/pdf2/ssn}{}
 Document,Document,pdf2,D,   
 Part,Part,pdf2,G,       
@@ -246,7 +246,7 @@
 % \section{The mathml namespace data}
 %    \begin{macrocode}
 %<*ns-mathml>
-%% \ProvidesExplFile {tagpdf-ns-mathml.def} {2023-08-30} {0.98l}
+%% \ProvidesExplFile {tagpdf-ns-mathml.def} {2023-10-27} {0.98m}
 % {mathml}{http://www.w3.org/1998/Math/MathML}{}
 abs,abs,mathml,
 and,and,mathml,
@@ -481,7 +481,7 @@
 % This will perhaps change in future.
 %    \begin{macrocode}
 %<*parent-child>
-%% \ProvidesExplFile {tagpdf-parent-child.csv} {2023-08-30} {0.98l}
+%% \ProvidesExplFile {tagpdf-parent-child.csv} {2023-10-27} {0.98m}
 ,,,StructTreeRoot,Document,Art,Part,Div,Sect,BlockQuote,NonStruct,TOC,TOCI,Index,Private,Quote,Note,Reference,BibEntry,P,Hn,H,Lbl,Code,Span,Link,Annot,Form,Ruby,RB,RT,RP,Warichu,WT,WP,L,LI,LBody,Table,TR,TH,TD,THead,TBody,TFoot,Caption,Figure,Formula,MC
 Document,both,document level,1,0..n,∅,‡,‡,∅,0..n,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅
 Art,1.7,grouping,∅,0..n,∅,‡,‡,0..n,0..n,‡,∅,∅,∅,0..n,∅,0..n,∅,∅,∅,0..1,0..1,∅,∅,∅,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,∅,∅
@@ -536,7 +536,7 @@
 % This will perhaps change in future.
 %    \begin{macrocode}
 %<*parent-child-2>
-%% \ProvidesExplFile {tagpdf-parent-child-2.csv} {2023-08-30} {0.98l}
+%% \ProvidesExplFile {tagpdf-parent-child-2.csv} {2023-10-27} {0.98m}
 ,,,StructTreeRoot,Document,DocumentFragment,Art,Part,Div,Sect,Aside,BlockQuote,NonStruct,TOC,TOCI,Index,Private,Title,Sub,Quote,Note,Reference,BibEntry,P,Hn,H,Lbl,Code,Em,Strong,Span,Link,Annot,Form,Ruby,RB,RT,RP,Warichu,WT,WP,FENote,L,LI,LBody,Table,TR,TH,TD,THead,TBody,TFoot,Caption,Figure,Formula,math,mathml,Artifact,MC
 Document,both,document level,1,0..n,0..n,∅,‡,‡,∅,0..n,0..n,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅
 DocumentFragment,2.0,document level,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,∅,0..n,∅,∅,∅,∅*,∅,∅,∅,∅,∅,∅,∅*,∅,∅,∅,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅,∅,∅,∅,0..n,∅

Modified: trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-generic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-generic.dtx	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-generic.dtx	2023-10-27 19:58:21 UTC (rev 68676)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.98l, released 2023-08-30}
+% \date{Version 0.98m, released 2023-10-27}
 % \maketitle
 % \begin{documentation}
 % \end{documentation}
@@ -55,11 +55,11 @@
 %    \begin{macrocode}
 %<@@=tag>
 %<*generic>
-\ProvidesExplPackage {tagpdf-mc-code-generic} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-mc-code-generic} {2023-10-27} {0.98m}
  {part of tagpdf - code related to marking chunks - generic mode}
 %</generic>
 %<*debug>
-\ProvidesExplPackage {tagpdf-debug-generic} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-debug-generic} {2023-10-27} {0.98m}
  {part of tagpdf - debugging code related to marking chunks - generic mode}
 %</debug>
 %    \end{macrocode}
@@ -542,11 +542,11 @@
     \cs_set_protected:Npn \@@_mc_bdc_mcid:nn #1 #2
       {
         \int_gincr:N \c at g_@@_MCID_abs_int
-        \@@_ref_label:en
+        \@@_property_record:eV
          {
            mcid-\int_use:N \c at g_@@_MCID_abs_int
          }
-         {mc}     
+         \c_@@_property_mc_clist     
         \@@_mc_bdc_shipout:ee
           {#1}
           { 
@@ -561,7 +561,7 @@
  { 
    \msg_new:nnn { tagpdf } { old-engine }
     { 
-      The~engine~or~the~PDF management~is~too~old or\\
+      The~engine~or~the~PDF management~is~too~old~or\\
       delayed~shipout~has~been~disabled.\\
       Fast~numbering~of~MC-chunks~not~available.\\
       More~compilations~will~be~needed~in~generic~mode.
@@ -573,14 +573,14 @@
 %    \end{macrocode}
 % revert the attribute:
 %    \begin{macrocode}
-   \ref_attribute_gset:nnnn {tagmcid }  {0} { now }
-      { \int_use:N \g_@@_MCID_tmp_bypage_int }
+   \@@_property_gset:nnnn {tagmcid } { now }
+       {0}  { \int_use:N \g_@@_MCID_tmp_bypage_int }
    \cs_new_protected:Npn \@@_mc_bdc_mcid:nn #1 #2
      {
        \int_gincr:N \c at g_@@_MCID_abs_int
        \tl_set:Nx \l_@@_mc_ref_abspage_tl
          {
-           \@@_ref_value:enn %3 args
+           \@@_property_ref:enn %3 args
              {
                mcid-\int_use:N \c at g_@@_MCID_abs_int
              }
@@ -609,11 +609,11 @@
              { \l_@@_mc_ref_abspage_tl }
              {1}
          }
-       \@@_ref_label:en
+       \@@_property_record:eV
          {
            mcid-\int_use:N \c at g_@@_MCID_abs_int
          }
-         { mc }
+         \c_@@_property_mc_clist
         \@@_mc_bdc:nx
           {#1}
           { /MCID~\int_eval:n { \g_@@_MCID_tmp_bypage_int }~ \exp_not:n { #2 } }

Modified: trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-luacode.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-luacode.dtx	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-luacode.dtx	2023-10-27 19:58:21 UTC (rev 68676)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.98l, released 2023-08-30}
+% \date{Version 0.98m, released 2023-10-27}
 % \maketitle
 % \begin{implementation}
 % The code is splitted into three parts: code shared by all engines,
@@ -86,11 +86,11 @@
 %    \begin{macrocode}
 %<@@=tag>
 %<*luamode>
-\ProvidesExplPackage {tagpdf-mc-code-lua} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-mc-code-lua} {2023-10-27} {0.98m}
   {tagpdf - mc code only for the luamode }
 %</luamode>
 %<*debug>
-\ProvidesExplPackage {tagpdf-debug-lua} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-debug-lua} {2023-10-27} {0.98m}
  {part of tagpdf - debugging code related to marking chunks - lua mode}
 %</debug>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-shared.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-shared.dtx	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-shared.dtx	2023-10-27 19:58:21 UTC (rev 68676)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.98l, released 2023-08-30}
+% \date{Version 0.98m, released 2023-10-27}
 % \maketitle
 % \begin{documentation}
 % \section{Public Commands}
@@ -113,7 +113,7 @@
 
 % \begin{function}[ EXP,added=2023-06-11]{\tag_mc_reset_box:N}
 %   \begin{syntax}
-%     \cs{tag_mc_reset:N} \Arg{box} 
+%     \cs{tag_mc_reset_box:N} \Arg{box} 
 %   \end{syntax}
 %   This resets in lua mode the mc attributes to the one currently in use.
 %   It does nothing in generic mode.
@@ -181,7 +181,7 @@
 %    \begin{macrocode}
 %<@@=tag>
 %<*header>
-\ProvidesExplPackage {tagpdf-mc-code-shared} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-mc-code-shared} {2023-10-27} {0.98m}
   {part of tagpdf - code related to marking chunks -
    code shared by generic and luamode }
 %</header>
@@ -297,7 +297,7 @@
 %    \begin{macrocode}
 \cs_new:Npn \@@_mc_handle_mc_label:e #1
   {
-    \ref_label:en{tagpdf-#1}{tagabspage,tagmcabs}
+    \@@_property_record:en{tagpdf-#1}{tagabspage,tagmcabs}
   }
 %    \end{macrocode}
 % \end{macro}
@@ -328,7 +328,7 @@
   {
     \@@_check_if_active_struct:T
       {
-        \tl_set:Nx  \l_@@_tmpa_tl { \@@_ref_value:nnn{tagpdf-#1}{tagmcabs}{} }
+        \tl_set:Nx  \l_@@_tmpa_tl { \@@_property_ref:nnn{tagpdf-#1}{tagmcabs}{} }
         \tl_if_empty:NTF\l_@@_tmpa_tl
           {
             \msg_warning:nnn {tag} {mc-label-unknown} {#1}

Modified: trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-roles.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-roles.dtx	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-roles.dtx	2023-10-27 19:58:21 UTC (rev 68676)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.98l, released 2023-08-30}
+% \date{Version 0.98m, released 2023-10-27}
 % \maketitle
 % \begin{documentation}
 % \begin{function}
@@ -98,7 +98,7 @@
 %    \begin{macrocode}
 %<@@=tag>
 %<*header>
-\ProvidesExplPackage {tagpdf-roles-code} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-roles-code} {2023-10-27} {0.98m}
  {part of tagpdf - code related to roles and structure names}
 %</header>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-space.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-space.dtx	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-space.dtx	2023-10-27 19:58:21 UTC (rev 68676)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.98l, released 2023-08-30}
+% \date{Version 0.98m, released 2023-10-27}
 % \maketitle
 % \begin{documentation}
 % \begin{function}{interwordspace (setup-key)}
@@ -64,7 +64,7 @@
 %    \begin{macrocode}
 %<@@=tag>
 %<*header>
-\ProvidesExplPackage {tagpdf-space-code} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-space-code} {2023-10-27} {0.98m}
  {part of tagpdf - code related to real space chars}
 %</header>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-struct.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-struct.dtx	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-struct.dtx	2023-10-27 19:58:21 UTC (rev 68676)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.98l, released 2023-08-30}
+% \date{Version 0.98m, released 2023-10-27}
 % \maketitle
 % \begin{documentation}
 % \section{Public Commands}
@@ -140,7 +140,7 @@
 % must refer to an already existing, previously created structure. Such a structure
 % number can for example be have been stored with \cs{tag_get:n}, but one can also use
 % a label on the parent structure and then use
-% \cs{ref_value:nn}|{tagpdfstruct-label}{tagstruct}| to retrieve it.
+% \cs{property_ref:nn}|{tagpdfstruct-label}{tagstruct}| to retrieve it.
 % \end{function}
 % \begin{function}{title (struct-key),title-o (struct-key)}
 % This keys allows to set the dictionary entry
@@ -247,7 +247,7 @@
 %    \begin{macrocode}
 %<@@=tag>
 %<*header>
-\ProvidesExplPackage {tagpdf-struct-code} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-struct-code} {2023-10-27} {0.98m}
  {part of tagpdf - code related to storing structure}
 %</header>
 %    \end{macrocode}
@@ -463,9 +463,27 @@
         \@@_struct_output_prop_aux:nn {#1}{##1}
       }
   }
+%</package>  
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\@@_struct_prop_gput:nnn}
+% The structure props must be filled in various places.
+% For this we use a common command which also takes care of the debug package: 
+%    \begin{macrocode}
+%<*package|debug>
+%<package>\cs_new_protected:Npn \@@_struct_prop_gput:nnn #1 #2 #3
+%<debug>\cs_set_protected:Npn \@@_struct_prop_gput:nnn #1 #2 #3
+ {
+   \@@_prop_gput:cnn
+        { g_@@_struct_#1_prop }{#2}{#3}
+%<debug>\prop_gput:cnn { g_@@_struct_debug_#1_prop } {#2} {#3}        
+ }
+\cs_generate_variant:Nn \@@_struct_prop_gput:nnn {nne,nee,nno} 
+%</package|debug>
+%    \end{macrocode}
+% \end{macro}
+
 % \subsection{Initialization of the StructTreeRoot}
 % The first structure element, the StructTreeRoot is special, so
 % created manually. The underlying object is |@@/struct/0| which is currently
@@ -475,49 +493,43 @@
 % code. This avoid timing issues.
 %
 %    \begin{macrocode}
+%<*package>
 \tl_gset:Nn \g_@@_struct_stack_current_tl {0}
 %    \end{macrocode}
 % \begin{macro}{\@@_pdf_name_e:n}
 %    \begin{macrocode}
 \cs_new:Npn \@@_pdf_name_e:n #1{\pdf_name_from_unicode_e:n{#1}}
+%</package>
 %    \end{macrocode}
 % \end{macro}
 %
 % \begin{variable}{g_@@_struct_0_prop,g_@@_struct_kids_0_seq}
 %    \begin{macrocode}
+%<*package>
 \@@_prop_new:c { g_@@_struct_0_prop }
 \@@_new_output_prop_handler:n {0}
 \@@_seq_new:c  { g_@@_struct_kids_0_seq }
 
-\@@_prop_gput:cnx
-  { g_@@_struct_0_prop }
+\@@_struct_prop_gput:nne
+  { 0 }            
   { Type }
   { \pdf_name_from_unicode_e:n {StructTreeRoot} }
 
-\@@_prop_gput:cnx
-  { g_@@_struct_0_prop }
+\@@_struct_prop_gput:nne
+  { 0 }            
   { S }
   { \pdf_name_from_unicode_e:n {StructTreeRoot} }
 
-\@@_prop_gput:cnx
-  { g_@@_struct_0_prop }
+\@@_struct_prop_gput:nne
+  { 0 }            
   { rolemap }
   { {StructTreeRoot}{pdf} }
 
-\@@_prop_gput:cnx
-  { g_@@_struct_0_prop }
+\@@_struct_prop_gput:nne
+  { 0 }            
   { parentrole }
   { {StructTreeRoot}{pdf} }
-%</package>
-%<*debug>
-\prop_new:c { g_@@_struct_debug_0_prop }
-\prop_gset_eq:cc 
-   { g_@@_struct_debug_0_prop }
-   { g_@@_struct_0_prop }
-\prop_gremove:cn { g_@@_struct_debug_0_prop }{Namespaces}  
-\seq_new:c  { g_@@_struct_debug_kids_0_seq }
-%</debug>
-%<*package>
+  
 %    \end{macrocode}
 % Namespaces are pdf 2.0.
 % If the code moves into the kernel, the setting must be probably delayed.
@@ -524,12 +536,20 @@
 %    \begin{macrocode}
 \pdf_version_compare:NnF < {2.0}
  {
-   \@@_prop_gput:cnx
-    { g_@@_struct_0_prop }
+   \@@_struct_prop_gput:nne
+    { 0 }            
     { Namespaces }
     { \pdf_object_ref:n { @@/tree/namespaces } }
- }   
+ } 
+%</package>
 %    \end{macrocode}
+% In debug mode we have to copy the root manually as it is already setup:
+%    \begin{macrocode}
+%<debug>\prop_new:c { g_@@_struct_debug_0_prop }
+%<debug>\seq_new:c  { g_@@_struct_debug_kids_0_seq }
+%<debug>\prop_gset_eq:cc { g_@@_struct_debug_0_prop }{ g_@@_struct_0_prop }
+%<debug>\prop_gremove:cn { g_@@_struct_debug_0_prop }{Namespaces}   
+%    \end{macrocode}
 % \end{variable}
 % 
 % \subsection{Adding the /ID key}
@@ -537,6 +557,7 @@
 % simply calculated from the structure number.
 % \begin{macro}{\@@_struct_get_id:n}
 %    \begin{macrocode}
+%<*package>
 \cs_new:Npn \@@_struct_get_id:n #1 %#1=struct num
   {
     (
@@ -561,8 +582,8 @@
    \cs_new_protected:Npn \@@_struct_set_tag_info:nnn #1 #2 #3
      %#1 structure number, #2 tag, #3 NS
      { 
-       \@@_prop_gput:cnx
-         { g_@@_struct_#1_prop }         
+       \@@_struct_prop_gput:nne
+         { #1 }            
          { S }
          { \pdf_name_from_unicode_e:n {#2}  } %
      }
@@ -570,14 +591,14 @@
  {     
    \cs_new_protected:Npn \@@_struct_set_tag_info:nnn #1 #2 #3
      {  
-       \@@_prop_gput:cnx
-         { g_@@_struct_#1_prop }
+       \@@_struct_prop_gput:nne
+         { #1 }            
          { S }
          { \pdf_name_from_unicode_e:n {#2} } %
        \prop_get:NnNT \g_@@_role_NS_prop {#3} \l_@@_get_tmpc_tl
          {
-           \@@_prop_gput:cnx
-             { g_@@_struct_#1_prop }
+           \@@_struct_prop_gput:nne
+             { #1 }            
              { NS }
              { \l_@@_get_tmpc_tl } %
          }
@@ -599,8 +620,8 @@
          { parentrole }
          \l_@@_get_tmpc_tl
          {
-           \tl_set:Nx #2{\exp_last_unbraced:NV\use_i:nn  \l_@@_get_tmpc_tl}
-           \tl_set:Nx #3{\exp_last_unbraced:NV\use_ii:nn \l_@@_get_tmpc_tl}
+           \tl_set:Ne #2{\exp_last_unbraced:NV\use_i:nn  \l_@@_get_tmpc_tl}
+           \tl_set:Ne #3{\exp_last_unbraced:NV\use_ii:nn \l_@@_get_tmpc_tl}
          }         
          {
            \tl_clear:N#2
@@ -614,7 +635,7 @@
 % Commands to store the kids. Kids in a structure can be a reference to a mc-chunk,
 % an object reference to another structure element, or a object reference to an
 % annotation (through an OBJR object).
-% \begin{macro}{\@@_struct_kid_mc_gput_right:nn,\@@_struct_kid_mc_gput_right:nx}
+% \begin{macro}{\@@_struct_kid_mc_gput_right:nn,\@@_struct_kid_mc_gput_right:ne}
 % The command to store an mc-chunk, this is a dictionary of type MCR.
 % It would be possible to write out the content directly as unnamed object
 % and to store only the object reference, but probably this would be slower,
@@ -631,8 +652,8 @@
       /Type \c_space_tl /MCR \c_space_tl
       /Pg
         \c_space_tl
-      \pdf_pageobject_ref:n { \@@_ref_value:enn{mcid-#1}{tagabspage}{1} }
-       /MCID \c_space_tl \@@_ref_value:enn{mcid-#1}{tagmcid}{1}
+      \pdf_pageobject_ref:n { \@@_property_ref:enn{mcid-#1}{tagabspage}{1} }
+       /MCID \c_space_tl \@@_property_ref:enn{mcid-#1}{tagmcid}{1}
      >>
   }
 %</package>  
@@ -658,12 +679,12 @@
         \prop_item:Nn \g_@@_struct_cont_mc_prop {#2}
       }
   }
-%<package>\cs_generate_variant:Nn \@@_struct_kid_mc_gput_right:nn {nx}
+%<package>\cs_generate_variant:Nn \@@_struct_kid_mc_gput_right:nn {ne}
 %    \end{macrocode}
 % \end{macro}
 %  \begin{macro}
 %    {
-%      \@@_struct_kid_struct_gput_right:nn,\@@_struct_kid_struct_gput_right:xx
+%      \@@_struct_kid_struct_gput_right:nn,\@@_struct_kid_struct_gput_right:ee
 %    }
 %  This commands adds a structure as kid. We only need to record the object
 %  reference in the sequence.
@@ -683,11 +704,11 @@
 %<debug>      }            
   }
 
-%<package>\cs_generate_variant:Nn \@@_struct_kid_struct_gput_right:nn {xx}
+%<package>\cs_generate_variant:Nn \@@_struct_kid_struct_gput_right:nn {ee}
 %    \end{macrocode}
 % \end{macro}
 % \begin{macro}
-%  {\@@_struct_kid_OBJR_gput_right:nnn,\@@_struct_kid_OBJR_gput_right:xxx}
+%  {\@@_struct_kid_OBJR_gput_right:nnn,\@@_struct_kid_OBJR_gput_right:eee}
 % At last the command to add an OBJR object. This has to write an object first.
 % The first argument is the number of the parent structure, the second the
 % (expanded) object reference of the annotation. The last argument is the page
@@ -709,7 +730,7 @@
       {
         \pdf_object_ref_last:
       }
-%<debug>    \seq_gput_right:cx
+%<debug>    \seq_gput_right:ce
 %<debug>      { g_@@_struct_debug_kids_#1_seq }
 %<debug>      {
 %<debug>        OBJR~reference
@@ -717,7 +738,7 @@
   }
 %</package|debug>  
 %<*package>
-\cs_generate_variant:Nn\@@_struct_kid_OBJR_gput_right:nnn { xxx }
+\cs_generate_variant:Nn\@@_struct_kid_OBJR_gput_right:nnn { eee }
 %    \end{macrocode}
 % \end{macro}
 % \begin{macro}
@@ -752,7 +773,7 @@
      {
         \seq_clear:N \l_@@_tmpa_seq
         \seq_map_inline:cn { g_@@_struct_kids_#1_seq }
-         { \seq_put_right:Nx \l_@@_tmpa_seq { ##1 } }
+         { \seq_put_right:Ne \l_@@_tmpa_seq { ##1 } }
         %\seq_show:c { g_@@_struct_kids_#1_seq }
         %\seq_show:N \l_@@_tmpa_seq
         \seq_remove_all:Nn \l_@@_tmpa_seq {}
@@ -779,7 +800,9 @@
                \@@_struct_exchange_kid_command:c
                 {g_@@_struct_kids_#1_seq}
              }
-           \@@_prop_gput:cnx { g_@@_struct_#1_prop } {K}
+           \@@_struct_prop_gput:nne
+             {#1}            
+             {K}
              {
                \seq_item:cn
                  {
@@ -790,7 +813,9 @@
          } %
       }
       { %many kids, use an array
-        \@@_prop_gput:cnx { g_@@_struct_#1_prop } {K}
+        \@@_struct_prop_gput:nne
+          {#1} 
+          {K}
           {
             [
               \seq_use:cn
@@ -823,7 +848,7 @@
          _entries_seq
       }
       {
-        \tl_put_right:Nx
+        \tl_put_right:Ne
           #2
           {
              \prop_if_in:cnT
@@ -872,11 +897,11 @@
 %    \begin{macrocode}
         \prop_get:cnNF { g_@@_struct_#1_prop } {P}\l_@@_tmpb_tl
           { 
-            \prop_gput:cnx { g_@@_struct_#1_prop } {P}{\pdf_object_ref:n { @@/struct/0  }}
-            \prop_gput:cnx { g_@@_struct_#1_prop } {S}{/Artifact}
+            \prop_gput:cne { g_@@_struct_#1_prop } {P}{\pdf_object_ref:n { @@/struct/0  }}
+            \prop_gput:cne { g_@@_struct_#1_prop } {S}{/Artifact}
             \seq_if_empty:cF {g_@@_struct_kids_#1_seq}
               {
-                \msg_warning:nnxx 
+                \msg_warning:nnee 
                   {tag} 
                   {struct-orphan} 
                   { #1 }
@@ -885,8 +910,8 @@
           }              
         \@@_struct_fill_kid_key:n { #1 }
         \@@_struct_get_dict_content:nN { #1 } \l_@@_tmpa_tl
-        \exp_args:Nx
-              \pdf_object_write:nnx
+        \exp_args:Ne
+              \pdf_object_write:nne
                 { @@/struct/#1 }
                 {dict}
                 {
@@ -939,8 +964,8 @@
           }
         %put the obj number of the annot in the kid entry, this also creates
         %the OBJR object
-        \ref_label:nn {__tag_objr_page_#2 }{ tagabspage }
-        \@@_struct_kid_OBJR_gput_right:xxx
+        \@@_property_record:nn {@tag at objr@page@#2 }{ tagabspage }
+        \@@_struct_kid_OBJR_gput_right:eee
           {
             \l_@@_struct_stack_parent_tmpa_tl
           }
@@ -948,10 +973,10 @@
             #1 %
           }
           {
-            \pdf_pageobject_ref:n { \@@_ref_value:nnn {__tag_objr_page_#2 }{ tagabspage }{1} }
+            \pdf_pageobject_ref:n { \@@_property_ref:nnn {@tag at objr@page@#2 }{ tagabspage }{1} }
           }
         % add the parent obj number to the parent tree:
-        \exp_args:Nnx
+        \exp_args:Nne
         \@@_parenttree_add_objr:nn
           {
             #2
@@ -1053,9 +1078,9 @@
           {
             \int_compare_p:nNn {#1}<{\c at g_@@_struct_abs_int}
           }
-          { \tl_set:Nx \l_@@_struct_stack_parent_tmpa_tl { \int_eval:n {#1} } }
+          { \tl_set:Ne \l_@@_struct_stack_parent_tmpa_tl { \int_eval:n {#1} } }
           {
-            \msg_warning:nnxx { tag } { struct-unknown }
+            \msg_warning:nnee { tag } { struct-unknown }
               { \int_eval:n {#1} }
               { parent~key~ignored }
           }
@@ -1064,8 +1089,8 @@
     tag   .code:n        = % S property
       {
         \seq_set_split:Nne \l_@@_tmpa_seq { / } {#1/\prop_item:Ne\g__tag_role_tags_NS_prop{#1}}
-        \tl_gset:Nx \g_@@_struct_tag_tl   { \seq_item:Nn\l_@@_tmpa_seq {1} }
-        \tl_gset:Nx \g_@@_struct_tag_NS_tl{ \seq_item:Nn\l_@@_tmpa_seq {2} }  
+        \tl_gset:Ne \g_@@_struct_tag_tl   { \seq_item:Nn\l_@@_tmpa_seq {1} }
+        \tl_gset:Ne \g_@@_struct_tag_NS_tl{ \seq_item:Nn\l_@@_tmpa_seq {2} }  
         \@@_check_structure_tag:N \g_@@_struct_tag_tl
       },
     title .code:n        = % T property
@@ -1075,8 +1100,8 @@
           { #1 }
           { default }
           { utf16/hex }
-        \@@_prop_gput:cnx
-          { g_@@_struct_\int_eval:n {\c at g_@@_struct_abs_int}_prop }
+        \@@_struct_prop_gput:nne
+          { \int_use:N \c at g_@@_struct_abs_int }
           { T }
           { <\l_@@_tmpa_str> }
       },
@@ -1087,8 +1112,8 @@
           { #1 }
           { default }
           { utf16/hex }
-        \@@_prop_gput:cnx
-          { g_@@_struct_\int_eval:n {\c at g_@@_struct_abs_int}_prop }
+        \@@_struct_prop_gput:nne
+          { \int_use:N \c at g_@@_struct_abs_int }
           { T }
           { <\l_@@_tmpa_str> }
       },
@@ -1101,8 +1126,8 @@
             { #1 }
             { default }
             { utf16/hex }
-          \@@_prop_gput:cnx
-            { g_@@_struct_\int_eval:n {\c at g_@@_struct_abs_int}_prop }
+          \@@_struct_prop_gput:nne
+            { \int_use:N \c at g_@@_struct_abs_int }
             { Alt }
             { <\l_@@_tmpa_str> }
          }   
@@ -1117,8 +1142,8 @@
              { #1 }
              { default }
              { utf16/hex }
-           \@@_prop_gput:cnx
-             { g_@@_struct_\int_eval:n {\c at g_@@_struct_abs_int}_prop }
+           \@@_struct_prop_gput:nne
+             { \int_use:N \c at g_@@_struct_abs_int }
              { ActualText }
              { <\l_@@_tmpa_str>}
           }  
@@ -1125,8 +1150,8 @@
       },
     lang .code:n        = % Lang property
       {
-        \@@_prop_gput:cnx
-          { g_@@_struct_\int_eval:n {\c at g_@@_struct_abs_int}_prop }
+        \@@_struct_prop_gput:nne
+          { \int_use:N \c at g_@@_struct_abs_int }
           { Lang }
           { (#1) }
       },
@@ -1138,10 +1163,11 @@
         \tl_clear:N\l_@@_tmpa_tl
         \clist_map_inline:on {#1}
           {
-            \tl_put_right:Nx \l_@@_tmpa_tl
-              {~\ref_value:nn{tagpdfstruct-##1}{tagstructobj} }
+            \tl_put_right:Ne \l_@@_tmpa_tl
+              {~\@@_property_ref:en{tagpdfstruct-##1}{tagstructobj} }
           }
-        \@@_struct_gput_data_ref:ee { \int_eval:n {\c at g_@@_struct_abs_int} } {\l_@@_tmpa_tl}
+        \@@_struct_gput_data_ref:ee 
+         { \int_use:N \c at g_@@_struct_abs_int } {\l_@@_tmpa_tl}
       },
     E .code:n        = % E property
       {
@@ -1150,8 +1176,8 @@
           { #1 }
           { default }
           { utf16/hex }
-        \@@_prop_gput:cnx
-          { g_@@_struct_\int_eval:n {\c at g_@@_struct_abs_int}_prop }
+        \@@_struct_prop_gput:nne
+          { \int_use:N \c at g_@@_struct_abs_int }
           { E }
           { <\l_@@_tmpa_str> }
       },
@@ -1191,10 +1217,10 @@
               {tag-AFfile\int_use:N\g_@@_struct_AFobj_int.#2}
               {@@/fileobj\int_use:N\g_@@_struct_AFobj_int}
             \@@_struct_add_AF:ee
-              { \int_eval:n {\c at g_@@_struct_abs_int} }
+              { \int_use:N \c at g_@@_struct_abs_int }
               { \pdf_object_ref:e {@@/fileobj\int_use:N\g_@@_struct_AFobj_int} }
-            \@@_prop_gput:cnx
-              { g_@@_struct_\int_use:N\c at g_@@_struct_abs_int _prop }
+            \@@_struct_prop_gput:nne
+              { \int_use:N \c at g_@@_struct_abs_int } 
               { AF }
               {
                 [
@@ -1218,10 +1244,10 @@
           {tag-AFfile\int_use:N\g_@@_struct_AFobj_int.#2}
           \l_@@_tmpa_tl          
           \@@_struct_add_AF:ee
-            { \int_eval:n {\c at g_@@_struct_abs_int} }
+            { \int_use:N \c at g_@@_struct_abs_int }
             { \l_@@_tmpa_tl }
-          \@@_prop_gput:cnx
-            { g_@@_struct_\int_use:N\c at g_@@_struct_abs_int _prop }
+          \@@_struct_prop_gput:nne
+            { \int_use:N \c at g_@@_struct_abs_int } 
             { AF }
             {
               [
@@ -1243,7 +1269,7 @@
          g_@@_struct_#1_AF_tl
        }
        {
-         \tl_gput_right:cx
+         \tl_gput_right:ce
            { g_@@_struct_#1_AF_tl }
            {  \c_space_tl #2 }
        }
@@ -1250,7 +1276,7 @@
        {
           \tl_new:c
             { g_@@_struct_#1_AF_tl }
-          \tl_gset:cx
+          \tl_gset:ce
             { g_@@_struct_#1_AF_tl }
             { #2 }
        }
@@ -1262,9 +1288,9 @@
       {
         \pdf_object_if_exist:nTF {#1}
           {
-            \@@_struct_add_AF:ee { \int_eval:n {\c at g_@@_struct_abs_int} }{\pdf_object_ref:n {#1}}
-            \@@_prop_gput:cnx
-             { g_@@_struct_\int_eval:n {\c at g_@@_struct_abs_int}_prop }
+            \@@_struct_add_AF:ee { \int_use:N \c at g_@@_struct_abs_int }{\pdf_object_ref:n {#1}}
+            \@@_struct_prop_gput:nne
+             { \int_use:N \c at g_@@_struct_abs_int }            
              { AF }
              {
                [
@@ -1274,7 +1300,7 @@
              }
           }
           {
-
+             % message?
           }
       },
    ,AFinline .code:n =
@@ -1312,8 +1338,8 @@
         \pdf_object_if_exist:nTF {#1}
           {
             \@@_struct_add_AF:ee { 0 }{\pdf_object_ref:n {#1}}
-            \@@_prop_gput:cnx
-             { g_@@_struct_0_prop }
+            \@@_struct_prop_gput:nne
+             { 0 } 
              { AF }
              {
                [
@@ -1354,23 +1380,25 @@
         \exp_args:Ne
           \pdf_object_new:n
             { @@/struct/\int_eval:n { \c at g_@@_struct_abs_int } }
-        \@@_prop_gput:cno
-          { g_@@_struct_\int_eval:n { \c at g_@@_struct_abs_int }_prop }
-          { Type }
-          { /StructElem }
+         \@@_struct_prop_gput:nnn
+            { \int_use:N \c at g_@@_struct_abs_int }          
+            { Type }
+            { /StructElem }
         \tl_set:Nn \l_@@_struct_stack_parent_tmpa_tl {-1}
         \keys_set:nn { @@ / struct} { #1 }
 %    \end{macrocode}
 %    \begin{macrocode}
         \@@_struct_set_tag_info:eVV 
-          { \int_eval:n {\c at g_@@_struct_abs_int} }
+          { \int_use:N \c at g_@@_struct_abs_int }
            \g_@@_struct_tag_tl               
            \g_@@_struct_tag_NS_tl   
-        \@@_check_structure_has_tag:n { \int_eval:n {\c at g_@@_struct_abs_int} }           
+        \@@_check_structure_has_tag:n { \int_use:N \c at g_@@_struct_abs_int }           
         \tl_if_empty:NF
           \l_@@_struct_key_label_tl
           {
-            \@@_ref_label:en{tagpdfstruct-\l_@@_struct_key_label_tl}{struct}
+            \@@_property_record:eV
+             {tagpdfstruct-\l_@@_struct_key_label_tl}
+             \c_@@_property_struct_clist
           }
 %    \end{macrocode}
 % The structure number of the parent is either taken from the stack or
@@ -1394,12 +1422,12 @@
 %    \end{macrocode}
 % to target role and role NS 
 %    \begin{macrocode}
-        \@@_prop_gput:cnx
-              { g_@@_struct_\int_eval:n {\c at g_@@_struct_abs_int}_prop }
-              { rolemap }
-              {
-                {\l_@@_struct_roletag_tl}{\l_@@_struct_roletag_NS_tl} 
-              }  
+         \@@_struct_prop_gput:nne
+           { \int_use:N \c at g_@@_struct_abs_int }           
+           { rolemap }
+           {
+             {\l_@@_struct_roletag_tl}{\l_@@_struct_roletag_NS_tl} 
+           }  
 %    \end{macrocode}
 % we also store which role to use for parent/child test. If the role is
 % one of Part, Div, NonStruct we have to retrieve it from the parent.
@@ -1417,8 +1445,8 @@
             { parentrole }
             \l_@@_get_tmpc_tl
             {
-              \@@_prop_gput:cno
-                { g_@@_struct_\int_eval:n {\c at g_@@_struct_abs_int}_prop }
+              \@@_struct_prop_gput:nno
+                { \int_use:N \c at g_@@_struct_abs_int }          
                 { parentrole }
                 {
                   \l_@@_get_tmpc_tl
@@ -1426,8 +1454,8 @@
             }  
          }
          {
-           \@@_prop_gput:cnx
-              { g_@@_struct_\int_eval:n {\c at g_@@_struct_abs_int}_prop }
+            \@@_struct_prop_gput:nne
+              { \int_use:N \c at g_@@_struct_abs_int }            
               { parentrole }
               {
                 {\l_@@_struct_roletag_tl}{\l_@@_struct_roletag_NS_tl} 
@@ -1435,7 +1463,7 @@
          }
 %    \end{macrocode}
 %    \begin{macrocode}
-        \seq_gpush:Nx \g_@@_struct_tag_stack_seq 
+        \seq_gpush:Ne \g_@@_struct_tag_stack_seq 
           {{\g_@@_struct_tag_tl}{\l_@@_struct_roletag_tl}}
         \tl_gset:NV   \g_@@_struct_stack_current_tl \c at g_@@_struct_abs_int
         %\seq_show:N   \g_@@_struct_stack_seq
@@ -1463,7 +1491,7 @@
                   { g_@@_struct_ \l_@@_struct_stack_parent_tmpa_tl _prop}
                   {S}
                   \l_@@_tmpa_tl
-                \msg_warning:nnxxx 
+                \msg_warning:nneee 
                  { tag } 
                  {role-parent-child} 
                  { \l_@@_get_parent_tmpa_tl/\l_@@_get_parent_tmpb_tl } 
@@ -1478,7 +1506,7 @@
                 \cs_gset_eq:NN \g_@@_struct_tag_tl \l_@@_role_remap_tag_tl 
                 \cs_gset_eq:NN  \g_@@_struct_tag_NS_tl \l_@@_role_remap_NS_tl
                 \@@_struct_set_tag_info:eVV 
-                  { \int_eval:n {\c at g_@@_struct_abs_int} }
+                  { \int_use:N \c at g_@@_struct_abs_int }
                     \g_@@_struct_tag_tl               
                     \g_@@_struct_tag_NS_tl                                 
               }
@@ -1485,8 +1513,8 @@
 %    \end{macrocode}
 % Set the Parent.
 %    \begin{macrocode}
-            \@@_prop_gput:cnx
-              { g_@@_struct_\int_eval:n {\c at g_@@_struct_abs_int}_prop }
+             \@@_struct_prop_gput:nne
+              { \int_use:N \c at g_@@_struct_abs_int }           
               { P }
               {
                 \pdf_object_ref:e { @@/struct/\l_@@_struct_stack_parent_tmpa_tl }
@@ -1496,7 +1524,7 @@
             %record this structure as kid:
             %\tl_show:N \g_@@_struct_stack_current_tl
             %\tl_show:N \l_@@_struct_stack_parent_tmpa_tl
-            \@@_struct_kid_struct_gput_right:xx
+            \@@_struct_kid_struct_gput_right:ee
                { \l_@@_struct_stack_parent_tmpa_tl }
                { \g_@@_struct_stack_current_tl }
             %\prop_show:c { g_@@_struct_\g_@@_struct_stack_current_tl _prop }
@@ -1504,12 +1532,13 @@
           }
 %    \end{macrocode}
 % the debug mode stores in second prop and replaces value with more suitable ones.
+% (If the structure is updated later this gets perhaps lost, but well ...)
 % This must be done outside of the stash boolean.
 %    \begin{macrocode}
 %<debug>           \prop_gset_eq:cc 
 %<debug>             { g_@@_struct_debug_\int_eval:n {\c at g_@@_struct_abs_int}_prop }
 %<debug>             { g_@@_struct_\int_eval:n {\c at g_@@_struct_abs_int}_prop }
-%<debug>           \prop_gput:cnx
+%<debug>           \prop_gput:cne
 %<debug>             { g_@@_struct_debug_\int_eval:n {\c at g_@@_struct_abs_int}_prop }
 %<debug>             { P }
 %<debug>             { 
@@ -1520,7 +1549,7 @@
 %<debug>                   \l_@@_get_parent_tmpa_tl
 %<debug>                 }  
 %<debug>             }
-%<debug>           \prop_gput:cnx
+%<debug>           \prop_gput:cne
 %<debug>             { g_@@_struct_debug_\int_eval:n {\c at g_@@_struct_abs_int}_prop }
 %<debug>             { NS }
 %<debug>             { \g_@@_struct_tag_NS_tl } 
@@ -1557,11 +1586,11 @@
           }
        \seq_get:NNT \g_@@_struct_tag_stack_seq \l_@@_tmpa_tl
           {
-            \tl_gset:Nx \g_@@_struct_tag_tl 
+            \tl_gset:Ne \g_@@_struct_tag_tl 
               { \exp_last_unbraced:NV\use_i:nn \l_@@_tmpa_tl }
             \prop_get:NVNT\g_@@_role_tags_NS_prop \g_@@_struct_tag_tl\l_@@_tmpa_tl
              {
-               \tl_gset:Nx \g_@@_struct_tag_NS_tl { \l_@@_tmpa_tl } 
+               \tl_gset:Ne \g_@@_struct_tag_NS_tl { \l_@@_tmpa_tl } 
              }  
           }
 %<debug>\@@_debug_struct_end_insert:
@@ -1588,16 +1617,16 @@
     \@@_check_if_active_struct:T
       {
         \prop_if_exist:cTF
-          { g_@@_struct_\@@_ref_value:enn{tagpdfstruct-#1}{tagstruct}{unknown}_prop } %
+          { g_@@_struct_\@@_property_ref:enn{tagpdfstruct-#1}{tagstruct}{unknown}_prop } %
           {
             \@@_check_struct_used:n {#1}
             %add the label structure as kid to the current structure (can be the root)
-            \@@_struct_kid_struct_gput_right:xx
+            \@@_struct_kid_struct_gput_right:ee
               { \g_@@_struct_stack_current_tl }
-              { \@@_ref_value:enn{tagpdfstruct-#1}{tagstruct}{0} }
+              { \@@_property_ref:enn{tagpdfstruct-#1}{tagstruct}{0} }
             %add the current structure to the labeled one as parents
             \@@_prop_gput:cnx
-              { g_@@_struct_\@@_ref_value:enn{tagpdfstruct-#1}{tagstruct}{0}_prop }
+              { g_@@_struct_\@@_property_ref:enn{tagpdfstruct-#1}{tagstruct}{0}_prop }
               { P }
               {
                 \pdf_object_ref:e { @@/struct/\g_@@_struct_stack_current_tl }
@@ -1605,20 +1634,13 @@
 %    \end{macrocode}
 % debug code
 %    \begin{macrocode}
-%<debug>           \prop_gset_eq:cc 
-%<debug>             { g_@@_struct_debug_\@@_ref_value:enn{tagpdfstruct-#1}{tagstruct}{0}_prop }
-%<debug>             { g_@@_struct_\@@_ref_value:enn{tagpdfstruct-#1}{tagstruct}{0}_prop }
-%<debug>           \prop_gput:cnx
-%<debug>             { g_@@_struct_debug_\@@_ref_value:enn{tagpdfstruct-#1}{tagstruct}{0}_prop }
+%<debug>           \prop_gput:cne
+%<debug>             { g_@@_struct_debug_\@@_property_ref:enn{tagpdfstruct-#1}{tagstruct}{0}_prop }
 %<debug>             { P }
 %<debug>             { 
 %<debug>               parent~structure:~\g_@@_struct_stack_current_tl\c_space_tl=~
 %<debug>               \g_@@_struct_tag_tl
 %<debug>             }
-%<debug>           \prop_gput:cnx
-%<debug>             { g_@@_struct_debug_\int_eval:n {\c at g_@@_struct_abs_int}_prop }
-%<debug>             { NS }
-%<debug>             { \g_@@_struct_tag_NS_tl } 
 %    \end{macrocode}
 %   check if the tag is allowed as child. Here we have to retrieve the 
 %   tag info for the child, while the data for the parent is in 
@@ -1625,7 +1647,7 @@
 %   the global tl-vars:
 %    \begin{macrocode}
              \@@_struct_get_parentrole:eNN  
-              {\__tag_ref_value:enn{tagpdfstruct-#1}{tagstruct}{0}}
+              {\@@_property_ref:enn{tagpdfstruct-#1}{tagstruct}{0}}
               \l_@@_tmpa_tl
               \l_@@_tmpb_tl
             \@@_check_parent_child:VVVVN
@@ -1642,7 +1664,7 @@
                 \cs_gset_eq:NN \g_@@_struct_tag_tl \l_@@_role_remap_tag_tl 
                 \cs_gset_eq:NN  \g_@@_struct_tag_NS_tl \l_@@_role_remap_NS_tl
                 \@@_struct_set_tag_info:eVV 
-                  { \int_eval:n {\c at g_@@_struct_abs_int} }
+                  { \int_use:N \c at g_@@_struct_abs_int }
                     \g_@@_struct_tag_tl               
                     \g_@@_struct_tag_NS_tl                                 
               }              
@@ -1662,7 +1684,7 @@
 % TODO: decide how it should be guarded. Probably by the struct-check.
 %    \begin{macrocode}
 %<base>\cs_new_protected:Npn \tag_struct_use_num:n #1 {}
-%<*package>
+%<*package|debug>
 \cs_set_protected:Npn \tag_struct_use_num:n #1 %#1 is structure number
   { 
     \@@_check_if_active_struct:T
@@ -1678,16 +1700,23 @@
                 \msg_warning:nnn { tag } {struct-used-twice} {#1}
               }
             %add the label structure as kid to the current structure (can be the root)
-            \@@_struct_kid_struct_gput_right:xx
+            \@@_struct_kid_struct_gput_right:ee
               { \g_@@_struct_stack_current_tl }
               { #1 }
             %add the current structure to the labeled one as parents
-            \@@_prop_gput:cnx
-              { g_@@_struct_#1_prop }
+             \@@_struct_prop_gput:nne
+              { #1 }            
               { P }
               {
                 \pdf_object_ref:e { @@/struct/\g_@@_struct_stack_current_tl }
               }
+%<debug>           \prop_gput:cne
+%<debug>             { g_@@_struct_debug_#1_prop }
+%<debug>             { P }
+%<debug>             { 
+%<debug>               parent~structure:~\g_@@_struct_stack_current_tl\c_space_tl=~
+%<debug>               \g_@@_struct_tag_tl
+%<debug>             }
 %    \end{macrocode}
 %   check if the tag is allowed as child. Here we have to retrieve the 
 %   tag info for the child, while the data for the parent is in 
@@ -1711,7 +1740,7 @@
                 \cs_gset_eq:NN \g_@@_struct_tag_tl \l_@@_role_remap_tag_tl 
                 \cs_gset_eq:NN  \g_@@_struct_tag_NS_tl \l_@@_role_remap_NS_tl
                 \@@_struct_set_tag_info:eVV 
-                  { \int_eval:n {\c at g_@@_struct_abs_int} }
+                  { \int_use:N \c at g_@@_struct_abs_int }
                     \g_@@_struct_tag_tl               
                     \g_@@_struct_tag_NS_tl                                 
               }
@@ -1721,7 +1750,7 @@
           }
       }
   }
-%</package>
+%</package|debug>
 %    \end{macrocode}
 % \end{macro}
 % \begin{macro}[EXP]{\tag_struct_object_ref:n}
@@ -1741,9 +1770,13 @@
 %
 % \begin{macro}{\tag_struct_gput:nnn}
 % This is a command that allows to update the data of a structure.
-% The first argument is the
-% number of the structure, the second a keyword referring to a function,
-% the third the value. Currently the only keyword is \texttt{ref}
+% This often can't done simply by replacing the value, as we have to 
+% preserve and extend existing content. We use therefore dedicated functions
+% adjusted to the key in question. 
+% The first argument is the number of the structure, 
+% the second a keyword referring to a function,
+% the third the value. Currently the only keyword is \texttt{ref} which updates
+% the Ref key (an array)
 %    \begin{macrocode}
 \cs_new_protected:Npn \tag_struct_gput:nnn #1 #2 #3
  {
@@ -1754,20 +1787,22 @@
     {#1}{#3}
  }
 \cs_generate_variant:Nn \tag_struct_gput:nnn {ene,nne}
+%</package>
 %    \end{macrocode}
 % \end{macro}
 %
 % \begin{macro}{\@@_struct_gput_data_ref:nn}
 %    \begin{macrocode}
+%<*package>
 \cs_new_protected:Npn \@@_struct_gput_data_ref:nn #1 #2
-   % #1 receiving struct num, #2 list of object ref
+  % #1 receiving struct num, #2 list of object ref
    {
      \prop_get:cnN
         { g_@@_struct_#1_prop }
         {Ref}
         \l_@@_get_tmpc_tl
-     \@@_prop_gput:cnx
-        { g_@@_struct_#1_prop }
+     \@@_struct_prop_gput:nne
+        { #1 }
         { Ref }
         { \quark_if_no_value:NF\l_@@_get_tmpc_tl { \l_@@_get_tmpc_tl\c_space_tl }#2 }
     }
@@ -1774,11 +1809,11 @@
 \cs_generate_variant:Nn \@@_struct_gput_data_ref:nn {ee}
 %    \end{macrocode}
 % \end{macro}
-
 % \begin{macro}
 %   {
 %     \tag_struct_insert_annot:nn,
-%     \tag_struct_insert_annot:xx
+%     \tag_struct_insert_annot:xx,
+%     \tag_struct_insert_annot:ee
 %   }
 % \begin{macro}[EXP]
 %   {
@@ -1802,7 +1837,7 @@
       }
   }
 
-\cs_generate_variant:Nn \tag_struct_insert_annot:nn {xx}
+\cs_generate_variant:Nn \tag_struct_insert_annot:nn {xx,ee}
 \cs_new:Npn \tag_struct_parent_int: {\int_use:c { c at g_@@_parenttree_obj_int }}
 
 %</package>
@@ -1813,7 +1848,7 @@
 % \section{Attributes and attribute classes}
 %    \begin{macrocode}
 %<*header>
-\ProvidesExplPackage {tagpdf-attr-code} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-attr-code} {2023-10-27} {0.98m}
   {part of tagpdf - code related to attributes and attribute classes}
 %</header>
 %    \end{macrocode}
@@ -1872,6 +1907,19 @@
   }
 %    \end{macrocode}
 % \end{macro}
+% TEMP!!!!
+% we temporarly use an internal function for the mapping. This can go 
+% at the next update
+%    \begin{macrocode}
+\cs_if_free:NTF \seq_set_map_e:NNn
+  {
+    \cs_new_eq:NN \@@_seq_set_map_e:NNn \seq_set_map_x:NNn
+  }
+  {
+    \cs_new_eq:NN \@@_seq_set_map_e:NNn \seq_set_map_e:NNn
+  }  
+%    \end{macrocode}
+%
 % \begin{macro}{attribute-class (struct-key)}
 % attribute-class has to store the used attribute names so that
 % they can be added to the ClassMap later.
@@ -1880,12 +1928,12 @@
   {
     attribute-class .code:n =
      {
-       \clist_set:Nx \l_@@_tmpa_clist { #1 }
+       \clist_set:Ne \l_@@_tmpa_clist { #1 }
        \seq_set_from_clist:NN \l_@@_tmpb_seq \l_@@_tmpa_clist
 %    \end{macrocode}
 %    we convert the names into pdf names with slash
 %    \begin{macrocode}
-       \seq_set_map_x:NNn \l_@@_tmpa_seq \l_@@_tmpb_seq
+       \@@_seq_set_map_e:NNn \l_@@_tmpa_seq \l_@@_tmpb_seq
          {
            \pdf_name_from_unicode_e:n {##1}
          }
@@ -1897,7 +1945,7 @@
              }
            \seq_gput_left:Nn\g_@@_attr_class_used_seq { ##1}
          }
-       \tl_set:Nx \l_@@_tmpa_tl
+       \tl_set:Ne \l_@@_tmpa_tl
          {
            \int_compare:nT { \seq_count:N \l_@@_tmpa_seq > 1 }{[}
            \seq_use:Nn \l_@@_tmpa_seq  { \c_space_tl  }
@@ -1905,8 +1953,8 @@
          }
        \int_compare:nT { \seq_count:N \l_@@_tmpa_seq > 0 }
          {
-           \@@_prop_gput:cnx
-             { g_@@_struct_\int_eval:n {\c at g_@@_struct_abs_int}_prop }
+           \@@_struct_prop_gput:nne
+             { \int_use:N \c at g_@@_struct_abs_int }          
              { C }
              { \l_@@_tmpa_tl }
           %\prop_show:c  { g_@@_struct_\int_eval:n {\c at g_@@_struct_abs_int}_prop }
@@ -1921,7 +1969,7 @@
   {
     attribute .code:n  = % A property (attribute, value currently a dictionary)
       {
-        \clist_set:Nx          \l_@@_tmpa_clist { #1 }
+        \clist_set:Ne          \l_@@_tmpa_clist { #1 }
         \clist_if_empty:NF \l_@@_tmpa_clist
          {
             \seq_set_from_clist:NN \l_@@_tmpb_seq \l_@@_tmpa_clist
@@ -1928,11 +1976,11 @@
 %    \end{macrocode}
 %    we convert the names into pdf names with slash
 %    \begin{macrocode}
-           \seq_set_map_x:NNn \l_@@_tmpa_seq \l_@@_tmpb_seq
+           \@@_seq_set_map_e:NNn \l_@@_tmpa_seq \l_@@_tmpb_seq
              {
                \pdf_name_from_unicode_e:n {##1}
              }
-            \tl_set:Nx \l_@@_attr_value_tl
+            \tl_set:Ne \l_@@_attr_value_tl
               {
                 \int_compare:nT { \seq_count:N \l_@@_tmpa_seq > 1 }{[}%]
               }
@@ -1944,14 +1992,14 @@
                   }
                 \prop_if_in:NnF \g_@@_attr_objref_prop {##1}
                   {%\prop_show:N \g_@@_attr_entries_prop
-                    \pdf_object_unnamed_write:nx
+                    \pdf_object_unnamed_write:ne
                       { dict }
                       {
                         \prop_item:Nn\g_@@_attr_entries_prop {##1}
                       }
-                    \prop_gput:Nnx \g_@@_attr_objref_prop {##1} {\pdf_object_ref_last:}
+                    \prop_gput:Nne \g_@@_attr_objref_prop {##1} {\pdf_object_ref_last:}
                   }
-                \tl_put_right:Nx \l_@@_attr_value_tl
+                \tl_put_right:Ne \l_@@_attr_value_tl
                   {
                     \c_space_tl
                     \prop_item:Nn \g_@@_attr_objref_prop {##1}
@@ -1958,13 +2006,13 @@
                   }
      %     \tl_show:N \l_@@_attr_value_tl
               }
-            \tl_put_right:Nx \l_@@_attr_value_tl
+            \tl_put_right:Ne \l_@@_attr_value_tl
               { %[
                 \int_compare:nT { \seq_count:N \l_@@_tmpa_seq > 1 }{]}%
               }
      %     \tl_show:N \l_@@_attr_value_tl
-            \@@_prop_gput:cnx
-              { g_@@_struct_\int_eval:n {\c at g_@@_struct_abs_int}_prop }
+            \@@_struct_prop_gput:nne
+              { \int_use:N \c at g_@@_struct_abs_int }           
               { A }
               { \l_@@_attr_value_tl }
          }    

Modified: trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-tree.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-tree.dtx	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-tree.dtx	2023-10-27 19:58:21 UTC (rev 68676)
@@ -47,13 +47,13 @@
 %    }^^A
 % }
 %
-% \date{Version 0.98l, released 2023-08-30}
+% \date{Version 0.98m, released 2023-10-27}
 % \maketitle
 % \begin{implementation}
 %    \begin{macrocode}
 %<@@=tag>
 %<*header>
-\ProvidesExplPackage {tagpdf-tree-code} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-tree-code} {2023-10-27} {0.98m}
  {part of tagpdf - code related to writing trees and dictionaries to the pdf}
 %</header>
 %    \end{macrocode}
@@ -136,7 +136,7 @@
 \hook_gput_code:nnn{begindocument}{tagpdf}
  {
    \int_gset:Nn\g_@@_tree_id_pad_int 
-    {\tl_count:e { \@@_ref_value_lastpage:nn{tagstruct}{1000}}+1}
+    {\tl_count:e { \@@_property_ref_lastpage:nn{tagstruct}{1000}}+1}
  }
 
 %    \end{macrocode}
@@ -273,7 +273,7 @@
   {
     \int_gset:Nn
       \c at g_@@_parenttree_obj_int
-      { \@@_ref_value_lastpage:nn{abspage}{100}  }
+      { \@@_property_ref_lastpage:nn{abspage}{100}  }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -313,18 +313,18 @@
 \cs_new_protected:Npn \@@_tree_parenttree_rerun_msg: {}
 \cs_new_protected:Npn \@@_tree_fill_parenttree:
   {
-    \int_step_inline:nnnn{1}{1}{\@@_ref_value_lastpage:nn{abspage}{-1}} %not quite clear if labels are needed. See lua code
+    \int_step_inline:nnnn{1}{1}{\@@_property_ref_lastpage:nn{abspage}{-1}} %not quite clear if labels are needed. See lua code
       { %page ##1
         \prop_clear:N \l_@@_tmpa_prop
-        \int_step_inline:nnnn{1}{1}{\@@_ref_value_lastpage:nn{tagmcabs}{-1}}
+        \int_step_inline:nnnn{1}{1}{\@@_property_ref_lastpage:nn{tagmcabs}{-1}}
           {
             %mcid####1
             \int_compare:nT
-              {\@@_ref_value:enn{mcid-####1}{tagabspage}{-1}=##1} %mcid is on current page
+              {\@@_property_ref:enn{mcid-####1}{tagabspage}{-1}=##1} %mcid is on current page
               {% yes
                 \prop_put:Nxx
                   \l_@@_tmpa_prop
-                  {\@@_ref_value:enn{mcid-####1}{tagmcid}{-1}}
+                  {\@@_property_ref:enn{mcid-####1}{tagmcid}{-1}}
                   {\prop_item:Nn \g_@@_mc_parenttree_prop {####1}}
               }
           }

Modified: trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-user.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-user.dtx	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf-user.dtx	2023-10-27 19:58:21 UTC (rev 68676)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.98l, released 2023-08-30}
+% \date{Version 0.98m, released 2023-10-27}
 % \maketitle
 % \begin{documentation}
 % \section{Setup commands}
@@ -250,7 +250,7 @@
 %    \begin{macrocode}
 %<@@=tag>
 %<*header>
-\ProvidesExplPackage {tagpdf-user} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-user} {2023-10-27} {0.98m}
   {tagpdf - user commands}
 %</header>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf.dtx	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf.dtx	2023-10-27 19:58:21 UTC (rev 68676)
@@ -25,9 +25,9 @@
 % \fi
 % \begin{documentation}
 % \begin{function}{\ref_value:nnn}
-% This is a temporary definition which will have to
-% move to l3ref. It allows to locally set a default value if the label or the attribute
-% doesn't exist. See issue \#4 in Accessible-xref.
+% This is a temporary definition which will be removed once properties have been 
+% released. It allows to locally set a default value if the label or the attribute
+% doesn't exist. 
 % \begin{syntax}
 % \cs{ref_value:nnn}\Arg{label}\Arg{attribute}\Arg{fallback default}
 % \end{syntax}
@@ -93,7 +93,7 @@
 %    \begin{macrocode}
 %<@@=tag>
 %<*package>
-\ProvidesExplPackage {tagpdf} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf} {2023-10-27} {0.98m}
   { A package to experiment with pdf tagging }
 
 \bool_if:nF
@@ -119,7 +119,7 @@
 %    \end{macrocode}
 %<*debug>
 %    \begin{macrocode}
-\ProvidesExplPackage {tagpdf-debug} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-debug} {2023-10-27} {0.98m}
   { debug code for tagpdf }
 \@ifpackageloaded{tagpdf}{}{\PackageWarning{tagpdf-debug}{tagpdf~not~loaded,~quitting}\endinput}
 %    \end{macrocode}
@@ -142,7 +142,7 @@
 % we define a base package with dummy functions
 %    \begin{macrocode}
 %<*base>
-\ProvidesExplPackage {tagpdf-base} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-base} {2023-10-27} {0.98m}
   {part of tagpdf - provide base, no-op versions of the user commands }
 %</base>
 %    \end{macrocode} 
@@ -200,52 +200,48 @@
 % \begin{macro}{\@@_lastpagelabel:}
 %    \begin{macrocode}
 %<*package>
- \cs_new_protected:Npn \@@_lastpagelabel:
-   {
-     \legacy_if:nT { @filesw }
-       {
-         \exp_args:NNnx \exp_args:NNx\iow_now:Nn \@auxout
-            {
-              \token_to_str:N \newlabeldata
-                {@@_LastPage}
-                {
-                  {abspage} { \int_use:N \g_shipout_readonly_int}
-                  {tagmcabs}{ \int_use:N \c at g_@@_MCID_abs_int }
-                  {tagstruct}{\int_use:N \c at g_@@_struct_abs_int }
-                }
-            }
-       }
-   }
-
+\cs_if_exist:NTF \property_new:nnnn
+  {
+   \cs_new_protected:Npn \@@_lastpagelabel:
+     {
+       \legacy_if:nT { @filesw }
+         {
+           \exp_args:NNnx \exp_args:NNx\iow_now:Nn \@auxout
+              {
+                \token_to_str:N \new at label@record
+                  {@tag at LastPage}
+                  {
+                    {abspage} { \int_use:N \g_shipout_readonly_int}
+                    {tagmcabs}{ \int_use:N \c at g_@@_MCID_abs_int }
+                    {tagstruct}{\int_use:N \c at g_@@_struct_abs_int }
+                  }
+              }
+         }
+     }  
+  }
+  {
+   \cs_new_protected:Npn \@@_lastpagelabel:
+     {
+       \legacy_if:nT { @filesw }
+         {
+           \exp_args:NNnx \exp_args:NNx\iow_now:Nn \@auxout
+              {
+                \token_to_str:N \newlabeldata
+                  {@tag at LastPage}
+                  {
+                    {abspage} { \int_use:N \g_shipout_readonly_int}
+                    {tagmcabs}{ \int_use:N \c at g_@@_MCID_abs_int }
+                    {tagstruct}{\int_use:N \c at g_@@_struct_abs_int }
+                  }
+              }
+         }
+     }
+  }
  \AddToHook{enddocument/afterlastpage}
   {\@@_lastpagelabel:}
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\ref_value:nnn}
-% This allows to locally set a default value if the label or the attribute
-% doesn't exist.
-%    \begin{macrocode}
- \cs_if_exist:NF \ref_value:nnn
-   {
-     \cs_new:Npn \ref_value:nnn #1#2#3
-       {
-         \exp_args:Nee
-           \__ref_value:nnn
-            { \tl_to_str:n {#1} } { \tl_to_str:n {#2} } {#3}
-       }
-     \cs_new:Npn \__ref_value:nnn #1#2#3
-       {
-         \tl_if_exist:cTF { g__ref_label_ #1 _ #2 _tl }
-           { \tl_use:c { g__ref_label_ #1 _ #2 _tl } }
-           {
-             #3
-           }
-       }
-   }
-%    \end{macrocode}
-% \end{macro}
-
 % \section{Variables}
 % \begin{variable}
 %  {
@@ -282,10 +278,10 @@
 % \end{variable}
 % Attribute lists for the label command. We have a list for
 % mc-related labels, and one for structures.
-% \begin{macro}{\c_@@_refmc_clist,\c_@@_refstruct_clist}
+% \begin{macro}{\c_@@_property_mc_clist,\c_@@_property_struct_clist}
 %    \begin{macrocode}
-\clist_const:Nn \c_@@_refmc_clist     {tagabspage,tagmcabs,tagmcid}
-\clist_const:Nn \c_@@_refstruct_clist {tagstruct,tagstructobj}
+\clist_const:Nn \c_@@_property_mc_clist     {tagabspage,tagmcabs,tagmcid}
+\clist_const:Nn \c_@@_property_struct_clist {tagstruct,tagstructobj}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -367,11 +363,110 @@
 \cs_generate_variant:Nn \prop_gput:Nnn {Nxx,Nen}
 \cs_generate_variant:Nn \prop_put:Nnn  {Nxx}
 \cs_generate_variant:Nn \prop_item:Nn {No,Ne}
-\cs_generate_variant:Nn \ref_label:nn { nv }
 \cs_generate_variant:Nn \seq_set_split:Nnn{Nne}
 \cs_generate_variant:Nn \str_set_convert:Nnnn {Nonn, Noon, Nnon }
 \cs_generate_variant:Nn \clist_map_inline:nn {on}
 %    \end{macrocode}
+%
+% \section{Label and Reference commands}
+% To ease transition to properties we setup internal definition. They can be replaced
+% by the property definitions once that is released.
+% \begin{macro}{\@@_property_new:nnnn,\@@_property_gset:nnnn,\@@_property_ref:nnn}
+%    \begin{macrocode}
+\cs_if_exist:NTF \property_new:nnnn
+  {
+%    \end{macrocode}
+% At first a command to define new properties
+%    \begin{macrocode}
+    \cs_new_eq:NN \@@_property_new:nnnn \property_new:nnnn
+%    \end{macrocode}
+% For the non-shipout code we need also the option to reset property
+%    \begin{macrocode}
+    \cs_new_eq:NN \@@_property_gset:nnnn \property_gset:nnnn
+%    \end{macrocode}
+% The command to reference while giving a local default.
+%    \begin{macrocode}
+    \cs_new_eq:NN \@@_property_ref:nnn \property_ref:nnn 
+    \cs_new_eq:NN \@@_property_ref:nn \property_ref:nn 
+%    \end{macrocode}
+% The command to record     
+%    \begin{macrocode}
+    \cs_new_protected:Npn \@@_property_record:nn #1#2
+      {
+        \@bsphack
+        \property_record:nn{#1}{#2}
+        \@esphack
+      }  
+  }
+%    \end{macrocode}
+% now the same with l3ref-tmp
+%    \begin{macrocode}
+  {  
+    \cs_new_protected:Npn \@@_property_new:nnnn #1 #2 #3 #4
+      {
+        \ref_attribute_gset:nnnn {#1}{#3}{#2}{#4}
+      }
+    \cs_new_protected:Npn \@@_property_gset:nnnn #1 #2 #3 #4
+      {
+        \ref_attribute_gset:nnnn {#1}{#3}{#2}{#4}
+      }      
+    \cs_new:Npn \@@_property_ref:nnn #1#2#3
+       {
+         \exp_args:Nee
+           \__ref_value:nnn
+            { \tl_to_str:n {#1} } { \tl_to_str:n {#2} } {#3}
+       }
+    \cs_new:Npn \__ref_value:nnn #1#2#3
+       {
+         \tl_if_exist:cTF { g__ref_label_ #1 _ #2 _tl }
+           { \tl_use:c { g__ref_label_ #1 _ #2 _tl } }
+           {
+             #3
+           }
+       }  
+     \cs_new_eq:NN \@@_property_ref:nn \ref_value:nn   
+     \cs_new_protected:Npn \@@_property_record:nn #1#2
+       {
+         \@bsphack
+         \ref_label:nn {#1}{#2}
+         \@esphack
+       }  
+%    \end{macrocode}
+% to provide problems when switching between main and dev format:
+%    \begin{macrocode}
+     \providecommand\new at label@record[2]{}         
+  }
+%    \end{macrocode}
+% And a few variants
+%    \begin{macrocode}
+\cs_generate_variant:Nn \@@_property_ref:nnn {enn}
+\cs_generate_variant:Nn \@@_property_ref:nn {en}
+\cs_generate_variant:Nn \@@_property_record:nn {en,eV}
+%    \end{macrocode}
+% The graphic code in latex-lab uses an internal tagpdf command, so until the next 
+% release we need to provide it
+%    \begin{macrocode}
+\cs_new:Npn \@@_ref_value:enn #1#2#3
+  {
+    \tl_if_exist:cTF { g__ref_label_ #1 _ #2 _tl }
+           { \tl_use:c { g__ref_label_ #1 _ #2 _tl } }
+           {
+             #3
+           }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_property_ref_lastpage:nn}
+% A command to retrieve the lastpage label, this will be adapted when there
+% is a proper, kernel lastpage label.
+%    \begin{macrocode}
+\cs_new:Npn \@@_property_ref_lastpage:nn #1 #2
+  {
+    \@@_property_ref:nnn {@tag at LastPage}{#1}{#2}
+  }
+%    \end{macrocode}
+%\end{macro}
 
 % \section{Setup label attributes}
 % \begin{macro}{tagstruct,tagstructobj,tagabspage,tagmcabs,tagmcid}
@@ -385,9 +480,10 @@
 % With mc-chunks we store the absolute page number |tagabspage|,
 % the absolute id |tagmcabc|, and the id on the page |tagmcid|.
 %    \begin{macrocode}
-\ref_attribute_gset:nnnn { tagstruct } {0} { now }
-  { \int_use:N \c at g_@@_struct_abs_int }
-\ref_attribute_gset:nnnn { tagstructobj } {} { now }
+\@@_property_new:nnnn 
+  { tagstruct } { now } 
+  {0} { \int_use:N \c at g_@@_struct_abs_int }
+\@@_property_new:nnnn  { tagstructobj } { now }  {}
   {
     \pdf_object_if_exist:eT {@@/struct/\int_use:N \c at g__tag_struct_abs_int}
       {
@@ -394,60 +490,20 @@
         \pdf_object_ref:e{@@/struct/\int_use:N \c at g_@@_struct_abs_int}
       }
   }
-\ref_attribute_gset:nnnn { tagabspage } {0} { shipout }
-  { \int_use:N \g_shipout_readonly_int }
-\ref_attribute_gset:nnnn { tagmcabs } {0} { now }
-  { \int_use:N \c at g_@@_MCID_abs_int }
+\@@_property_new:nnnn  
+  { tagabspage } { shipout } 
+  {0} { \int_use:N \g_shipout_readonly_int }
+\@@_property_new:nnnn  { tagmcabs } { now }
+  {0} { \int_use:N \c at g_@@_MCID_abs_int }
 
 \flag_new:n { @@/mcid }     
-\ref_attribute_gset:nnnn {tagmcid }  {0} { shipout }
-  { \flag_height:n { @@/mcid } }
+\@@_property_new:nnnn  {tagmcid } { shipout }
+   {0} { \flag_height:n { @@/mcid } }
   
 %    \end{macrocode}
 % \end{macro}
 %
-% \section{Label commands}
-% \begin{macro}{\@@_ref_label:nn}
-% A version of |\ref_label:nn| to set a label
-% which takes a keyword |mc| or |struct| to
-% call the relevant lists.
-% TODO: check if |\@bsphack| and |\@esphack| make sense here.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_ref_label:nn #1 #2 %#1 label, #2 name of list mc or struct
-  {
-    \@bsphack
-    \ref_label:nv {#1}{c_@@_ref#2_clist}
-    \@esphack
-  }
-\cs_generate_variant:Nn \@@_ref_label:nn {en}
-%    \end{macrocode}
-% \end{macro}
-% \begin{macro}{\@@_ref_value:nnn}
-% A local version to retrieve the value. It is a direct wrapper,
-% but to keep naming consistent \ldots. It uses the variant defined temporarly
-% above.
-%    \begin{macrocode}
-\cs_new:Npn \@@_ref_value:nnn #1 #2 #3 %#1 label, #2 attribute, #3 default
-  {
-    \ref_value:nnn {#1}{#2}{#3}
-  }
-\cs_generate_variant:Nn \@@_ref_value:nnn {enn}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_ref_value_lastpage:nn}
-% A command to retrieve the lastpage label, this will be adapted when there
-% is a proper, kernel lastpage label.
-%    \begin{macrocode}
-\cs_new:Npn \@@_ref_value_lastpage:nn #1 #2
-  {
-    \ref_value:nnn {@@_LastPage}{#1}{#2}
-  }
-%    \end{macrocode}
-%\end{macro}
 
-
-
 %\section{Commands to fill seq and prop}
 % With most engines these are simply copies of the expl3 commands,
 % but luatex will overwrite them, to store the data also in lua tables.

Modified: trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf.ins	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/source/latex/tagpdf/tagpdf.ins	2023-10-27 19:58:21 UTC (rev 68676)
@@ -2,7 +2,7 @@
 
 File: tagpdf.ins
 
-Copyright (C) 2019-2022 Ulrike Fischer
+Copyright (C) 2019-2023 Ulrike Fischer
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this

Modified: trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-base.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-base.sty	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-base.sty	2023-10-27 19:58:21 UTC (rev 68676)
@@ -25,7 +25,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: tagpdf.dtx
-\ProvidesExplPackage {tagpdf-base} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-base} {2023-10-27} {0.98m}
   {part of tagpdf - provide base, no-op versions of the user commands }
 \AddToHook{begindocument}
  {
@@ -69,6 +69,7 @@
 \tl_new:N  \g__tag_struct_stack_current_tl
 \tl_gset:Nn \g__tag_struct_stack_current_tl {\int_use:N\c at g__tag_struct_abs_int}
 \prop_new:N \g__tag_struct_dest_num_prop
+
 \cs_new:Npn \__tag_get_data_struct_num:
   {
     \g__tag_struct_stack_current_tl

Modified: trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-debug-generic.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-debug-generic.sty	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-debug-generic.sty	2023-10-27 19:58:21 UTC (rev 68676)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: tagpdf-mc-generic.dtx
-\ProvidesExplPackage {tagpdf-debug-generic} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-debug-generic} {2023-10-27} {0.98m}
  {part of tagpdf - debugging code related to marking chunks - generic mode}
 \cs_set_protected:Npn \tag_mc_begin:n #1 %#1 keyval
   {

Modified: trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-debug-lua.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-debug-lua.sty	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-debug-lua.sty	2023-10-27 19:58:21 UTC (rev 68676)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: tagpdf-mc-luacode.dtx
-\ProvidesExplPackage {tagpdf-debug-lua} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-debug-lua} {2023-10-27} {0.98m}
  {part of tagpdf - debugging code related to marking chunks - lua mode}
 \cs_set_protected:Npn \__tag_mc_handle_stash:n #1 %1 mcidnum
   {

Modified: trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-debug.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-debug.sty	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-debug.sty	2023-10-27 19:58:21 UTC (rev 68676)
@@ -26,7 +26,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: tagpdf.dtx
-\ProvidesExplPackage {tagpdf-debug} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-debug} {2023-10-27} {0.98m}
   { debug code for tagpdf }
 \@ifpackageloaded{tagpdf}{}{\PackageWarning{tagpdf-debug}{tagpdf~not~loaded,~quitting}\endinput}
 \prop_gput:Nnn \g_msg_module_type_prop { tag / debug} {}
@@ -189,12 +189,18 @@
 %% File: tagpdf-tree.dtx
 %% File: tagpdf-roles.dtx
 %% File: tagpdf-struct.dtx
+\cs_set_protected:Npn \__tag_struct_prop_gput:nnn #1 #2 #3
+ {
+   \__tag_prop_gput:cnn
+        { g__tag_struct_#1_prop }{#2}{#3}
+\prop_gput:cnn { g__tag_struct_debug_#1_prop } {#2} {#3}
+ }
+\cs_generate_variant:Nn \__tag_struct_prop_gput:nnn {nne,nee,nno}
+
 \prop_new:c { g__tag_struct_debug_0_prop }
-\prop_gset_eq:cc
-   { g__tag_struct_debug_0_prop }
-   { g__tag_struct_0_prop }
+\seq_new:c  { g__tag_struct_debug_kids_0_seq }
+\prop_gset_eq:cc { g__tag_struct_debug_0_prop }{ g__tag_struct_0_prop }
 \prop_gremove:cn { g__tag_struct_debug_0_prop }{Namespaces}
-\seq_new:c  { g__tag_struct_debug_kids_0_seq }
 \cs_set_protected:Npn \__tag_struct_kid_mc_gput_right:nn #1 #2 %#1 structure num, #2 MCID absnum%
   {
     \__tag_seq_gput_right:cx
@@ -239,7 +245,7 @@
       {
         \pdf_object_ref_last:
       }
-    \seq_gput_right:cx
+    \seq_gput_right:ce
       { g__tag_struct_debug_kids_#1_seq }
       {
         OBJR~reference
@@ -259,21 +265,23 @@
         \exp_args:Ne
           \pdf_object_new:n
             { __tag/struct/\int_eval:n { \c at g__tag_struct_abs_int } }
-        \__tag_prop_gput:cno
-          { g__tag_struct_\int_eval:n { \c at g__tag_struct_abs_int }_prop }
-          { Type }
-          { /StructElem }
+         \__tag_struct_prop_gput:nnn
+            { \int_use:N \c at g__tag_struct_abs_int }
+            { Type }
+            { /StructElem }
         \tl_set:Nn \l__tag_struct_stack_parent_tmpa_tl {-1}
         \keys_set:nn { __tag / struct} { #1 }
         \__tag_struct_set_tag_info:eVV
-          { \int_eval:n {\c at g__tag_struct_abs_int} }
+          { \int_use:N \c at g__tag_struct_abs_int }
            \g__tag_struct_tag_tl
            \g__tag_struct_tag_NS_tl
-        \__tag_check_structure_has_tag:n { \int_eval:n {\c at g__tag_struct_abs_int} }
+        \__tag_check_structure_has_tag:n { \int_use:N \c at g__tag_struct_abs_int }
         \tl_if_empty:NF
           \l__tag_struct_key_label_tl
           {
-            \__tag_ref_label:en{tagpdfstruct-\l__tag_struct_key_label_tl}{struct}
+            \__tag_property_record:eV
+             {tagpdfstruct-\l__tag_struct_key_label_tl}
+             \c__tag_property_struct_clist
           }
         \int_compare:nNnT { \l__tag_struct_stack_parent_tmpa_tl } = { -1 }
           {
@@ -290,12 +298,12 @@
           \g__tag_struct_tag_NS_tl
           \l__tag_struct_roletag_tl
           \l__tag_struct_roletag_NS_tl
-        \__tag_prop_gput:cnx
-              { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
-              { rolemap }
-              {
-                {\l__tag_struct_roletag_tl}{\l__tag_struct_roletag_NS_tl}
-              }
+         \__tag_struct_prop_gput:nne
+           { \int_use:N \c at g__tag_struct_abs_int }
+           { rolemap }
+           {
+             {\l__tag_struct_roletag_tl}{\l__tag_struct_roletag_NS_tl}
+           }
         \str_case:VnTF \l__tag_struct_roletag_tl
          {
            {Part} {}
@@ -308,8 +316,8 @@
             { parentrole }
             \l__tag_get_tmpc_tl
             {
-              \__tag_prop_gput:cno
-                { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+              \__tag_struct_prop_gput:nno
+                { \int_use:N \c at g__tag_struct_abs_int }
                 { parentrole }
                 {
                   \l__tag_get_tmpc_tl
@@ -317,14 +325,14 @@
             }
          }
          {
-           \__tag_prop_gput:cnx
-              { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+            \__tag_struct_prop_gput:nne
+              { \int_use:N \c at g__tag_struct_abs_int }
               { parentrole }
               {
                 {\l__tag_struct_roletag_tl}{\l__tag_struct_roletag_NS_tl}
               }
          }
-        \seq_gpush:Nx \g__tag_struct_tag_stack_seq
+        \seq_gpush:Ne \g__tag_struct_tag_stack_seq
           {{\g__tag_struct_tag_tl}{\l__tag_struct_roletag_tl}}
         \tl_gset:NV   \g__tag_struct_stack_current_tl \c at g__tag_struct_abs_int
         %\seq_show:N   \g__tag_struct_stack_seq
@@ -347,7 +355,7 @@
                   { g__tag_struct_ \l__tag_struct_stack_parent_tmpa_tl _prop}
                   {S}
                   \l__tag_tmpa_tl
-                \msg_warning:nnxxx
+                \msg_warning:nneee
                  { tag }
                  {role-parent-child}
                  { \l__tag_get_parent_tmpa_tl/\l__tag_get_parent_tmpb_tl }
@@ -362,12 +370,12 @@
                 \cs_gset_eq:NN \g__tag_struct_tag_tl \l__tag_role_remap_tag_tl
                 \cs_gset_eq:NN  \g__tag_struct_tag_NS_tl \l__tag_role_remap_NS_tl
                 \__tag_struct_set_tag_info:eVV
-                  { \int_eval:n {\c at g__tag_struct_abs_int} }
+                  { \int_use:N \c at g__tag_struct_abs_int }
                     \g__tag_struct_tag_tl
                     \g__tag_struct_tag_NS_tl
               }
-            \__tag_prop_gput:cnx
-              { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+             \__tag_struct_prop_gput:nne
+              { \int_use:N \c at g__tag_struct_abs_int }
               { P }
               {
                 \pdf_object_ref:e { __tag/struct/\l__tag_struct_stack_parent_tmpa_tl }
@@ -375,7 +383,7 @@
             %record this structure as kid:
             %\tl_show:N \g__tag_struct_stack_current_tl
             %\tl_show:N \l__tag_struct_stack_parent_tmpa_tl
-            \__tag_struct_kid_struct_gput_right:xx
+            \__tag_struct_kid_struct_gput_right:ee
                { \l__tag_struct_stack_parent_tmpa_tl }
                { \g__tag_struct_stack_current_tl }
             %\prop_show:c { g__tag_struct_\g__tag_struct_stack_current_tl _prop }
@@ -384,7 +392,7 @@
            \prop_gset_eq:cc
              { g__tag_struct_debug_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
              { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
-           \prop_gput:cnx
+           \prop_gput:cne
              { g__tag_struct_debug_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
              { P }
              {
@@ -395,7 +403,7 @@
                    \l__tag_get_parent_tmpa_tl
                  }
              }
-           \prop_gput:cnx
+           \prop_gput:cne
              { g__tag_struct_debug_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
              { NS }
              { \g__tag_struct_tag_NS_tl }
@@ -428,11 +436,11 @@
           }
        \seq_get:NNT \g__tag_struct_tag_stack_seq \l__tag_tmpa_tl
           {
-            \tl_gset:Nx \g__tag_struct_tag_tl
+            \tl_gset:Ne \g__tag_struct_tag_tl
               { \exp_last_unbraced:NV\use_i:nn \l__tag_tmpa_tl }
             \prop_get:NVNT\g__tag_role_tags_NS_prop \g__tag_struct_tag_tl\l__tag_tmpa_tl
              {
-               \tl_gset:Nx \g__tag_struct_tag_NS_tl { \l__tag_tmpa_tl }
+               \tl_gset:Ne \g__tag_struct_tag_NS_tl { \l__tag_tmpa_tl }
              }
           }
 \__tag_debug_struct_end_insert:
@@ -450,36 +458,29 @@
     \__tag_check_if_active_struct:T
       {
         \prop_if_exist:cTF
-          { g__tag_struct_\__tag_ref_value:enn{tagpdfstruct-#1}{tagstruct}{unknown}_prop } %
+          { g__tag_struct_\__tag_property_ref:enn{tagpdfstruct-#1}{tagstruct}{unknown}_prop } %
           {
             \__tag_check_struct_used:n {#1}
             %add the label structure as kid to the current structure (can be the root)
-            \__tag_struct_kid_struct_gput_right:xx
+            \__tag_struct_kid_struct_gput_right:ee
               { \g__tag_struct_stack_current_tl }
-              { \__tag_ref_value:enn{tagpdfstruct-#1}{tagstruct}{0} }
+              { \__tag_property_ref:enn{tagpdfstruct-#1}{tagstruct}{0} }
             %add the current structure to the labeled one as parents
             \__tag_prop_gput:cnx
-              { g__tag_struct_\__tag_ref_value:enn{tagpdfstruct-#1}{tagstruct}{0}_prop }
+              { g__tag_struct_\__tag_property_ref:enn{tagpdfstruct-#1}{tagstruct}{0}_prop }
               { P }
               {
                 \pdf_object_ref:e { __tag/struct/\g__tag_struct_stack_current_tl }
               }
-           \prop_gset_eq:cc
-             { g__tag_struct_debug_\__tag_ref_value:enn{tagpdfstruct-#1}{tagstruct}{0}_prop }
-             { g__tag_struct_\__tag_ref_value:enn{tagpdfstruct-#1}{tagstruct}{0}_prop }
-           \prop_gput:cnx
-             { g__tag_struct_debug_\__tag_ref_value:enn{tagpdfstruct-#1}{tagstruct}{0}_prop }
+           \prop_gput:cne
+             { g__tag_struct_debug_\__tag_property_ref:enn{tagpdfstruct-#1}{tagstruct}{0}_prop }
              { P }
              {
                parent~structure:~\g__tag_struct_stack_current_tl\c_space_tl=~
                \g__tag_struct_tag_tl
              }
-           \prop_gput:cnx
-             { g__tag_struct_debug_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
-             { NS }
-             { \g__tag_struct_tag_NS_tl }
              \__tag_struct_get_parentrole:eNN
-              {\__tag_ref_value:enn{tagpdfstruct-#1}{tagstruct}{0}}
+              {\__tag_property_ref:enn{tagpdfstruct-#1}{tagstruct}{0}}
               \l__tag_tmpa_tl
               \l__tag_tmpb_tl
             \__tag_check_parent_child:VVVVN
@@ -496,7 +497,7 @@
                 \cs_gset_eq:NN \g__tag_struct_tag_tl \l__tag_role_remap_tag_tl
                 \cs_gset_eq:NN  \g__tag_struct_tag_NS_tl \l__tag_role_remap_NS_tl
                 \__tag_struct_set_tag_info:eVV
-                  { \int_eval:n {\c at g__tag_struct_abs_int} }
+                  { \int_use:N \c at g__tag_struct_abs_int }
                     \g__tag_struct_tag_tl
                     \g__tag_struct_tag_NS_tl
               }
@@ -506,6 +507,66 @@
           }
       }
   }
+\cs_set_protected:Npn \tag_struct_use_num:n #1 %#1 is structure number
+  {
+    \__tag_check_if_active_struct:T
+      {
+        \prop_if_exist:cTF
+          { g__tag_struct_#1_prop } %
+          {
+            \prop_get:cnNT
+              {g__tag_struct_#1_prop}
+              {P}
+              \l__tag_tmpa_tl
+              {
+                \msg_warning:nnn { tag } {struct-used-twice} {#1}
+              }
+            %add the label structure as kid to the current structure (can be the root)
+            \__tag_struct_kid_struct_gput_right:ee
+              { \g__tag_struct_stack_current_tl }
+              { #1 }
+            %add the current structure to the labeled one as parents
+             \__tag_struct_prop_gput:nne
+              { #1 }
+              { P }
+              {
+                \pdf_object_ref:e { __tag/struct/\g__tag_struct_stack_current_tl }
+              }
+           \prop_gput:cne
+             { g__tag_struct_debug_#1_prop }
+             { P }
+             {
+               parent~structure:~\g__tag_struct_stack_current_tl\c_space_tl=~
+               \g__tag_struct_tag_tl
+             }
+             \__tag_struct_get_parentrole:eNN
+              {#1}
+              \l__tag_tmpa_tl
+              \l__tag_tmpb_tl
+            \__tag_check_parent_child:VVVVN
+              \g__tag_struct_tag_tl
+              \g__tag_struct_tag_NS_tl
+              \l__tag_tmpa_tl
+              \l__tag_tmpb_tl
+              \l__tag_parent_child_check_tl
+            \int_compare:nNnT {\l__tag_parent_child_check_tl}<0
+              {
+                \cs_set_eq:NN \l__tag_role_remap_tag_tl \g__tag_struct_tag_tl
+                \cs_set_eq:NN \l__tag_role_remap_NS_tl \g__tag_struct_tag_NS_tl
+                \__tag_role_remap:
+                \cs_gset_eq:NN \g__tag_struct_tag_tl \l__tag_role_remap_tag_tl
+                \cs_gset_eq:NN  \g__tag_struct_tag_NS_tl \l__tag_role_remap_NS_tl
+                \__tag_struct_set_tag_info:eVV
+                  { \int_use:N \c at g__tag_struct_abs_int }
+                    \g__tag_struct_tag_tl
+                    \g__tag_struct_tag_NS_tl
+              }
+          }
+          {
+            \msg_warning:nnn{ tag }{struct-label-unknown}{#1}
+          }
+      }
+  }
 
 %% File: tagpdf-space.dtx
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-luatex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-luatex.def	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-luatex.def	2023-10-27 19:58:21 UTC (rev 68676)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: tagpdf-backend.dtx
-\ProvidesExplFile {tagpdf-luatex.def} {2023-08-30} {0.98l}
+\ProvidesExplFile {tagpdf-luatex.def} {2023-10-27} {0.98m}
   {tagpdf~driver~for~luatex}
 {
   \fontencoding{TU}\fontfamily{lmr}\fontseries{m}\fontshape{n}\fontsize{10pt}{10pt}\selectfont

Modified: trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-generic.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-generic.sty	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-generic.sty	2023-10-27 19:58:21 UTC (rev 68676)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: tagpdf-mc-generic.dtx
-\ProvidesExplPackage {tagpdf-mc-code-generic} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-mc-code-generic} {2023-10-27} {0.98m}
  {part of tagpdf - code related to marking chunks - generic mode}
 \tl_new:N \l__tag_mc_ref_abspage_tl
 
@@ -251,11 +251,11 @@
     \cs_set_protected:Npn \__tag_mc_bdc_mcid:nn #1 #2
       {
         \int_gincr:N \c at g__tag_MCID_abs_int
-        \__tag_ref_label:en
+        \__tag_property_record:eV
          {
            mcid-\int_use:N \c at g__tag_MCID_abs_int
          }
-         {mc}
+         \c__tag_property_mc_clist
         \__tag_mc_bdc_shipout:ee
           {#1}
           {
@@ -267,7 +267,7 @@
  {
    \msg_new:nnn { tagpdf } { old-engine }
     {
-      The~engine~or~the~PDF management~is~too~old or\\
+      The~engine~or~the~PDF management~is~too~old~or\\
       delayed~shipout~has~been~disabled.\\
       Fast~numbering~of~MC-chunks~not~available.\\
       More~compilations~will~be~needed~in~generic~mode.
@@ -276,14 +276,14 @@
    \__tag_prop_new:N \g__tag_MCID_byabspage_prop
    \int_new:N \g__tag_MCID_tmp_bypage_int
    \cs_generate_variant:Nn \__tag_mc_bdc:nn {nx}
-   \ref_attribute_gset:nnnn {tagmcid }  {0} { now }
-      { \int_use:N \g__tag_MCID_tmp_bypage_int }
+   \__tag_property_gset:nnnn {tagmcid } { now }
+       {0}  { \int_use:N \g__tag_MCID_tmp_bypage_int }
    \cs_new_protected:Npn \__tag_mc_bdc_mcid:nn #1 #2
      {
        \int_gincr:N \c at g__tag_MCID_abs_int
        \tl_set:Nx \l__tag_mc_ref_abspage_tl
          {
-           \__tag_ref_value:enn %3 args
+           \__tag_property_ref:enn %3 args
              {
                mcid-\int_use:N \c at g__tag_MCID_abs_int
              }
@@ -312,11 +312,11 @@
              { \l__tag_mc_ref_abspage_tl }
              {1}
          }
-       \__tag_ref_label:en
+       \__tag_property_record:eV
          {
            mcid-\int_use:N \c at g__tag_MCID_abs_int
          }
-         { mc }
+         \c__tag_property_mc_clist
         \__tag_mc_bdc:nx
           {#1}
           { /MCID~\int_eval:n { \g__tag_MCID_tmp_bypage_int }~ \exp_not:n { #2 } }

Modified: trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-lua.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-lua.sty	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-lua.sty	2023-10-27 19:58:21 UTC (rev 68676)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: tagpdf-mc-luacode.dtx
-\ProvidesExplPackage {tagpdf-mc-code-lua} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf-mc-code-lua} {2023-10-27} {0.98m}
   {tagpdf - mc code only for the luamode }
 \hook_gput_code:nnn{begindocument}{tagpdf/mc}
   {

Modified: trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-latex-book.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-latex-book.def	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-latex-book.def	2023-10-27 19:58:21 UTC (rev 68676)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: tagpdf-data.dtx
-%% \ProvidesExplFile {tagpdf-ns-latex-book.def} {2023-08-30} {0.98l}
+%% \ProvidesExplFile {tagpdf-ns-latex-book.def} {2023-10-27} {0.98m}
 %% {latex-book} {https://www.latex-project.org/ns/book/2022}{}
 chapter,       H1,pdf2,
 section,       H2,pdf2,

Modified: trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-latex-inline.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-latex-inline.def	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-latex-inline.def	2023-10-27 19:58:21 UTC (rev 68676)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: tagpdf-data.dtx
-%% \ProvidesExplFile {tagpdf-ns-latex-inline.def} {2023-08-30} {0.98l}
+%% \ProvidesExplFile {tagpdf-ns-latex-inline.def} {2023-10-27} {0.98m}
 %% {latex-inline} {https://www.latex-project.org/ns/inline/2022}{}
 chapter,       Span, pdf2,
 section,       Span, pdf2,

Modified: trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-latex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-latex.def	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-latex.def	2023-10-27 19:58:21 UTC (rev 68676)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: tagpdf-data.dtx
-%% \ProvidesExplFile {tagpdf-ns-latex.def} {2023-08-30} {0.98l}
+%% \ProvidesExplFile {tagpdf-ns-latex.def} {2023-10-27} {0.98m}
 %% {latex} {https://www.latex-project.org/ns/dflt/2022}{}
 title,        Title,    pdf2,
 part,         Title,    pdf2,

Modified: trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-mathml.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-mathml.def	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-mathml.def	2023-10-27 19:58:21 UTC (rev 68676)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: tagpdf-data.dtx
-%% \ProvidesExplFile {tagpdf-ns-mathml.def} {2023-08-30} {0.98l}
+%% \ProvidesExplFile {tagpdf-ns-mathml.def} {2023-10-27} {0.98m}
 abs,abs,mathml,
 and,and,mathml,
 annotation,annotation,mathml,

Modified: trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-pdf.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-pdf.def	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-pdf.def	2023-10-27 19:58:21 UTC (rev 68676)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: tagpdf-data.dtx
-%% \ProvidesExplFile {tagpdf-ns-pdf.def} {2023-08-30} {0.98l}
+%% \ProvidesExplFile {tagpdf-ns-pdf.def} {2023-10-27} {0.98m}
 %%  {pdf}   {http://iso.org/pdf/ssn}{}
 StructTreeRoot,StructTreeRoot,pdf,D,
 Document,Document,pdf,D,

Modified: trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-pdf2.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-pdf2.def	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-ns-pdf2.def	2023-10-27 19:58:21 UTC (rev 68676)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: tagpdf-data.dtx
-%% \ProvidesExplFile {tagpdf-ns-pdf2.def} {2023-08-30} {0.98l}
+%% \ProvidesExplFile {tagpdf-ns-pdf2.def} {2023-10-27} {0.98m}
 %%  {pdf2}  {http://iso.org/pdf2/ssn}{}
 Document,Document,pdf2,D,
 Part,Part,pdf2,G,

Modified: trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-parent-child-2.csv
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-parent-child-2.csv	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-parent-child-2.csv	2023-10-27 19:58:21 UTC (rev 68676)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: tagpdf-data.dtx
-%% \ProvidesExplFile {tagpdf-parent-child-2.csv} {2023-08-30} {0.98l}
+%% \ProvidesExplFile {tagpdf-parent-child-2.csv} {2023-10-27} {0.98m}
 ,,,StructTreeRoot,Document,DocumentFragment,Art,Part,Div,Sect,Aside,BlockQuote,NonStruct,TOC,TOCI,Index,Private,Title,Sub,Quote,Note,Reference,BibEntry,P,Hn,H,Lbl,Code,Em,Strong,Span,Link,Annot,Form,Ruby,RB,RT,RP,Warichu,WT,WP,FENote,L,LI,LBody,Table,TR,TH,TD,THead,TBody,TFoot,Caption,Figure,Formula,math,mathml,Artifact,MC
 Document,both,document level,1,0..n,0..n,∅,‡,‡,∅,0..n,0..n,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅
 DocumentFragment,2.0,document level,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,∅,0..n,∅,∅,∅,∅*,∅,∅,∅,∅,∅,∅,∅*,∅,∅,∅,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅,∅,∅,∅,0..n,∅

Modified: trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-parent-child.csv
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-parent-child.csv	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-parent-child.csv	2023-10-27 19:58:21 UTC (rev 68676)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: tagpdf-data.dtx
-%% \ProvidesExplFile {tagpdf-parent-child.csv} {2023-08-30} {0.98l}
+%% \ProvidesExplFile {tagpdf-parent-child.csv} {2023-10-27} {0.98m}
 ,,,StructTreeRoot,Document,Art,Part,Div,Sect,BlockQuote,NonStruct,TOC,TOCI,Index,Private,Quote,Note,Reference,BibEntry,P,Hn,H,Lbl,Code,Span,Link,Annot,Form,Ruby,RB,RT,RP,Warichu,WT,WP,L,LI,LBody,Table,TR,TH,TD,THead,TBody,TFoot,Caption,Figure,Formula,MC
 Document,both,document level,1,0..n,∅,‡,‡,∅,0..n,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅
 Art,1.7,grouping,∅,0..n,∅,‡,‡,0..n,0..n,‡,∅,∅,∅,0..n,∅,0..n,∅,∅,∅,0..1,0..1,∅,∅,∅,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,∅,∅

Modified: trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf.lua	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf.lua	2023-10-27 19:58:21 UTC (rev 68676)
@@ -24,8 +24,8 @@
 
 local ProvidesLuaModule = {
     name          = "tagpdf",
-    version       = "0.98l",       --TAGVERSION
-    date          = "2023-08-30", --TAGDATE
+    version       = "0.98m",       --TAGVERSION
+    date          = "2023-10-27", --TAGDATE
     description   = "tagpdf lua code",
     license       = "The LATEX Project Public License 1.3c"
 }

Modified: trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf.sty	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf.sty	2023-10-27 19:58:21 UTC (rev 68676)
@@ -28,7 +28,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: tagpdf.dtx
-\ProvidesExplPackage {tagpdf} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdf} {2023-10-27} {0.98m}
   { A package to experiment with pdf tagging }
 
 \bool_if:nF
@@ -67,43 +67,45 @@
 \RequirePackage{l3ref-tmp}
 \RequirePackage{tagpdf-base}
 
- \cs_new_protected:Npn \__tag_lastpagelabel:
-   {
-     \legacy_if:nT { @filesw }
-       {
-         \exp_args:NNnx \exp_args:NNx\iow_now:Nn \@auxout
-            {
-              \token_to_str:N \newlabeldata
-                {__tag_LastPage}
-                {
-                  {abspage} { \int_use:N \g_shipout_readonly_int}
-                  {tagmcabs}{ \int_use:N \c at g__tag_MCID_abs_int }
-                  {tagstruct}{\int_use:N \c at g__tag_struct_abs_int }
-                }
-            }
-       }
-   }
-
+\cs_if_exist:NTF \property_new:nnnn
+  {
+   \cs_new_protected:Npn \__tag_lastpagelabel:
+     {
+       \legacy_if:nT { @filesw }
+         {
+           \exp_args:NNnx \exp_args:NNx\iow_now:Nn \@auxout
+              {
+                \token_to_str:N \new at label@record
+                  {@tag at LastPage}
+                  {
+                    {abspage} { \int_use:N \g_shipout_readonly_int}
+                    {tagmcabs}{ \int_use:N \c at g__tag_MCID_abs_int }
+                    {tagstruct}{\int_use:N \c at g__tag_struct_abs_int }
+                  }
+              }
+         }
+     }
+  }
+  {
+   \cs_new_protected:Npn \__tag_lastpagelabel:
+     {
+       \legacy_if:nT { @filesw }
+         {
+           \exp_args:NNnx \exp_args:NNx\iow_now:Nn \@auxout
+              {
+                \token_to_str:N \newlabeldata
+                  {@tag at LastPage}
+                  {
+                    {abspage} { \int_use:N \g_shipout_readonly_int}
+                    {tagmcabs}{ \int_use:N \c at g__tag_MCID_abs_int }
+                    {tagstruct}{\int_use:N \c at g__tag_struct_abs_int }
+                  }
+              }
+         }
+     }
+  }
  \AddToHook{enddocument/afterlastpage}
   {\__tag_lastpagelabel:}
- \cs_if_exist:NF \ref_value:nnn
-   {
-     \cs_new:Npn \ref_value:nnn #1#2#3
-       {
-         \exp_args:Nee
-           \__ref_value:nnn
-            { \tl_to_str:n {#1} } { \tl_to_str:n {#2} } {#3}
-       }
-     \cs_new:Npn \__ref_value:nnn #1#2#3
-       {
-         \tl_if_exist:cTF { g__ref_label_ #1 _ #2 _tl }
-           { \tl_use:c { g__ref_label_ #1 _ #2 _tl } }
-           {
-             #3
-           }
-       }
-   }
-
 \tl_new:N    \l__tag_tmpa_tl
 \tl_new:N    \l__tag_tmpb_tl
 \tl_new:N    \l__tag_get_tmpc_tl
@@ -117,8 +119,8 @@
 \int_new:N   \l__tag_tmpa_int
 \box_new:N   \l__tag_tmpa_box
 \box_new:N   \l__tag_tmpb_box
-\clist_const:Nn \c__tag_refmc_clist     {tagabspage,tagmcabs,tagmcid}
-\clist_const:Nn \c__tag_refstruct_clist {tagstruct,tagstructobj}
+\clist_const:Nn \c__tag_property_mc_clist     {tagabspage,tagmcabs,tagmcid}
+\clist_const:Nn \c__tag_property_struct_clist {tagstruct,tagstructobj}
 \int_new:N  \l__tag_loglevel_int
 \bool_new:N \g__tag_active_space_bool
 \bool_new:N \g__tag_active_mc_bool
@@ -139,46 +141,91 @@
 \cs_generate_variant:Nn \prop_gput:Nnn {Nxx,Nen}
 \cs_generate_variant:Nn \prop_put:Nnn  {Nxx}
 \cs_generate_variant:Nn \prop_item:Nn {No,Ne}
-\cs_generate_variant:Nn \ref_label:nn { nv }
 \cs_generate_variant:Nn \seq_set_split:Nnn{Nne}
 \cs_generate_variant:Nn \str_set_convert:Nnnn {Nonn, Noon, Nnon }
 \cs_generate_variant:Nn \clist_map_inline:nn {on}
-
-\ref_attribute_gset:nnnn { tagstruct } {0} { now }
-  { \int_use:N \c at g__tag_struct_abs_int }
-\ref_attribute_gset:nnnn { tagstructobj } {} { now }
+\cs_if_exist:NTF \property_new:nnnn
   {
-    \pdf_object_if_exist:eT {__tag/struct/\int_use:N \c at g__tag_struct_abs_int}
+    \cs_new_eq:NN \__tag_property_new:nnnn \property_new:nnnn
+    \cs_new_eq:NN \__tag_property_gset:nnnn \property_gset:nnnn
+    \cs_new_eq:NN \__tag_property_ref:nnn \property_ref:nnn
+    \cs_new_eq:NN \__tag_property_ref:nn \property_ref:nn
+    \cs_new_protected:Npn \__tag_property_record:nn #1#2
       {
-        \pdf_object_ref:e{__tag/struct/\int_use:N \c at g__tag_struct_abs_int}
+        \@bsphack
+        \property_record:nn{#1}{#2}
+        \@esphack
       }
   }
-\ref_attribute_gset:nnnn { tagabspage } {0} { shipout }
-  { \int_use:N \g_shipout_readonly_int }
-\ref_attribute_gset:nnnn { tagmcabs } {0} { now }
-  { \int_use:N \c at g__tag_MCID_abs_int }
-
-\flag_new:n { __tag/mcid }
-\ref_attribute_gset:nnnn {tagmcid }  {0} { shipout }
-  { \flag_height:n { __tag/mcid } }
-
-\cs_new_protected:Npn \__tag_ref_label:nn #1 #2 %#1 label, #2 name of list mc or struct
   {
-    \@bsphack
-    \ref_label:nv {#1}{c__tag_ref#2_clist}
-    \@esphack
+    \cs_new_protected:Npn \__tag_property_new:nnnn #1 #2 #3 #4
+      {
+        \ref_attribute_gset:nnnn {#1}{#3}{#2}{#4}
+      }
+    \cs_new_protected:Npn \__tag_property_gset:nnnn #1 #2 #3 #4
+      {
+        \ref_attribute_gset:nnnn {#1}{#3}{#2}{#4}
+      }
+    \cs_new:Npn \__tag_property_ref:nnn #1#2#3
+       {
+         \exp_args:Nee
+           \__ref_value:nnn
+            { \tl_to_str:n {#1} } { \tl_to_str:n {#2} } {#3}
+       }
+    \cs_new:Npn \__ref_value:nnn #1#2#3
+       {
+         \tl_if_exist:cTF { g__ref_label_ #1 _ #2 _tl }
+           { \tl_use:c { g__ref_label_ #1 _ #2 _tl } }
+           {
+             #3
+           }
+       }
+     \cs_new_eq:NN \__tag_property_ref:nn \ref_value:nn
+     \cs_new_protected:Npn \__tag_property_record:nn #1#2
+       {
+         \@bsphack
+         \ref_label:nn {#1}{#2}
+         \@esphack
+       }
+     \providecommand\new at label@record[2]{}
   }
-\cs_generate_variant:Nn \__tag_ref_label:nn {en}
-\cs_new:Npn \__tag_ref_value:nnn #1 #2 #3 %#1 label, #2 attribute, #3 default
+\cs_generate_variant:Nn \__tag_property_ref:nnn {enn}
+\cs_generate_variant:Nn \__tag_property_ref:nn {en}
+\cs_generate_variant:Nn \__tag_property_record:nn {en,eV}
+\cs_new:Npn \__tag_ref_value:enn #1#2#3
   {
-    \ref_value:nnn {#1}{#2}{#3}
+    \tl_if_exist:cTF { g__ref_label_ #1 _ #2 _tl }
+           { \tl_use:c { g__ref_label_ #1 _ #2 _tl } }
+           {
+             #3
+           }
   }
-\cs_generate_variant:Nn \__tag_ref_value:nnn {enn}
-\cs_new:Npn \__tag_ref_value_lastpage:nn #1 #2
+\cs_new:Npn \__tag_property_ref_lastpage:nn #1 #2
   {
-    \ref_value:nnn {__tag_LastPage}{#1}{#2}
+    \__tag_property_ref:nnn {@tag at LastPage}{#1}{#2}
   }
 
+\__tag_property_new:nnnn
+  { tagstruct } { now }
+  {0} { \int_use:N \c at g__tag_struct_abs_int }
+\__tag_property_new:nnnn  { tagstructobj } { now }  {}
+  {
+    \pdf_object_if_exist:eT {__tag/struct/\int_use:N \c at g__tag_struct_abs_int}
+      {
+        \pdf_object_ref:e{__tag/struct/\int_use:N \c at g__tag_struct_abs_int}
+      }
+  }
+\__tag_property_new:nnnn
+  { tagabspage } { shipout }
+  {0} { \int_use:N \g_shipout_readonly_int }
+\__tag_property_new:nnnn  { tagmcabs } { now }
+  {0} { \int_use:N \c at g__tag_MCID_abs_int }
+
+\flag_new:n { __tag/mcid }
+\__tag_property_new:nnnn  {tagmcid } { shipout }
+   {0} { \flag_height:n { __tag/mcid } }
+
+
 \cs_set_eq:NN \__tag_prop_new:N        \prop_new:N
 \cs_set_eq:NN \__tag_seq_new:N         \seq_new:N
 \cs_set_eq:NN \__tag_prop_gput:Nnn     \prop_gput:Nnn
@@ -407,7 +454,7 @@
 \cs_new_protected:Npn \__tag_check_struct_used:n #1 %#1 label
   {
     \prop_get:cnNT
-      {g__tag_struct_\__tag_ref_value:enn{tagpdfstruct-#1}{tagstruct}{unknown}_prop}
+      {g__tag_struct_\__tag_property_ref:enn{tagpdfstruct-#1}{tagstruct}{unknown}_prop}
       {P}
       \l__tag_tmpa_tl
       {
@@ -519,7 +566,7 @@
   {
     \tl_set:Nx \l__tag_tmpa_tl
       {
-        \__tag_ref_value_lastpage:nn
+        \__tag_property_ref_lastpage:nn
           {abspage}
           {-1}
       }
@@ -533,7 +580,7 @@
           {1}
           {1}
           {
-            \__tag_ref_value_lastpage:nn
+            \__tag_property_ref_lastpage:nn
               {tagmcabs}
               {-1}
           }
@@ -540,7 +587,7 @@
           {
             \int_compare:nT
               {
-                \__tag_ref_value:enn
+                \__tag_property_ref:enn
                   {mcid-####1}
                   {tagabspage}
                   {-1}
@@ -551,7 +598,7 @@
                \seq_gput_right:Nx \l_tmpa_seq
                  {
                    Page##1-####1-
-                   \__tag_ref_value:enn
+                   \__tag_property_ref:enn
                      {mcid-####1}
                      {tagmcid}
                      {-1}
@@ -601,7 +648,7 @@
 \tl_new:N \l__tag_mc_key_properties_tl
 \cs_new:Npn \__tag_mc_handle_mc_label:e #1
   {
-    \ref_label:en{tagpdf-#1}{tagabspage,tagmcabs}
+    \__tag_property_record:en{tagpdf-#1}{tagabspage,tagmcabs}
   }
 \cs_new_protected:Npn \__tag_mc_set_label_used:n #1 %#1 labelname
   {
@@ -611,7 +658,7 @@
   {
     \__tag_check_if_active_struct:T
       {
-        \tl_set:Nx  \l__tag_tmpa_tl { \__tag_ref_value:nnn{tagpdf-#1}{tagmcabs}{} }
+        \tl_set:Nx  \l__tag_tmpa_tl { \__tag_property_ref:nnn{tagpdf-#1}{tagmcabs}{} }
         \tl_if_empty:NTF\l__tag_tmpa_tl
           {
             \msg_warning:nnn {tag} {mc-label-unknown} {#1}
@@ -768,7 +815,7 @@
 \hook_gput_code:nnn{begindocument}{tagpdf}
  {
    \int_gset:Nn\g__tag_tree_id_pad_int
-    {\tl_count:e { \__tag_ref_value_lastpage:nn{tagstruct}{1000}}+1}
+    {\tl_count:e { \__tag_property_ref_lastpage:nn{tagstruct}{1000}}+1}
  }
 
 \cs_new_protected:Npn \__tag_tree_write_idtree:
@@ -863,7 +910,7 @@
   {
     \int_gset:Nn
       \c at g__tag_parenttree_obj_int
-      { \__tag_ref_value_lastpage:nn{abspage}{100}  }
+      { \__tag_property_ref_lastpage:nn{abspage}{100}  }
   }
 \tl_new:N \g__tag_parenttree_objr_tl
 \cs_new_protected:Npn \__tag_parenttree_add_objr:nn #1 #2 %#1 StructParent number, #2 objref
@@ -877,18 +924,18 @@
 \cs_new_protected:Npn \__tag_tree_parenttree_rerun_msg: {}
 \cs_new_protected:Npn \__tag_tree_fill_parenttree:
   {
-    \int_step_inline:nnnn{1}{1}{\__tag_ref_value_lastpage:nn{abspage}{-1}} %not quite clear if labels are needed. See lua code
+    \int_step_inline:nnnn{1}{1}{\__tag_property_ref_lastpage:nn{abspage}{-1}} %not quite clear if labels are needed. See lua code
       { %page ##1
         \prop_clear:N \l__tag_tmpa_prop
-        \int_step_inline:nnnn{1}{1}{\__tag_ref_value_lastpage:nn{tagmcabs}{-1}}
+        \int_step_inline:nnnn{1}{1}{\__tag_property_ref_lastpage:nn{tagmcabs}{-1}}
           {
             %mcid####1
             \int_compare:nT
-              {\__tag_ref_value:enn{mcid-####1}{tagabspage}{-1}=##1} %mcid is on current page
+              {\__tag_property_ref:enn{mcid-####1}{tagabspage}{-1}=##1} %mcid is on current page
               {% yes
                 \prop_put:Nxx
                   \l__tag_tmpa_prop
-                  {\__tag_ref_value:enn{mcid-####1}{tagmcid}{-1}}
+                  {\__tag_property_ref:enn{mcid-####1}{tagmcid}{-1}}
                   {\prop_item:Nn \g__tag_mc_parenttree_prop {####1}}
               }
           }
@@ -1892,6 +1939,13 @@
         \__tag_struct_output_prop_aux:nn {#1}{##1}
       }
   }
+\cs_new_protected:Npn \__tag_struct_prop_gput:nnn #1 #2 #3
+ {
+   \__tag_prop_gput:cnn
+        { g__tag_struct_#1_prop }{#2}{#3}
+ }
+\cs_generate_variant:Nn \__tag_struct_prop_gput:nnn {nne,nee,nno}
+
 \tl_gset:Nn \g__tag_struct_stack_current_tl {0}
 \cs_new:Npn \__tag_pdf_name_e:n #1{\pdf_name_from_unicode_e:n{#1}}
 \__tag_prop_new:c { g__tag_struct_0_prop }
@@ -1898,29 +1952,30 @@
 \__tag_new_output_prop_handler:n {0}
 \__tag_seq_new:c  { g__tag_struct_kids_0_seq }
 
-\__tag_prop_gput:cnx
-  { g__tag_struct_0_prop }
+\__tag_struct_prop_gput:nne
+  { 0 }
   { Type }
   { \pdf_name_from_unicode_e:n {StructTreeRoot} }
 
-\__tag_prop_gput:cnx
-  { g__tag_struct_0_prop }
+\__tag_struct_prop_gput:nne
+  { 0 }
   { S }
   { \pdf_name_from_unicode_e:n {StructTreeRoot} }
 
-\__tag_prop_gput:cnx
-  { g__tag_struct_0_prop }
+\__tag_struct_prop_gput:nne
+  { 0 }
   { rolemap }
   { {StructTreeRoot}{pdf} }
 
-\__tag_prop_gput:cnx
-  { g__tag_struct_0_prop }
+\__tag_struct_prop_gput:nne
+  { 0 }
   { parentrole }
   { {StructTreeRoot}{pdf} }
+
 \pdf_version_compare:NnF < {2.0}
  {
-   \__tag_prop_gput:cnx
-    { g__tag_struct_0_prop }
+   \__tag_struct_prop_gput:nne
+    { 0 }
     { Namespaces }
     { \pdf_object_ref:n { __tag/tree/namespaces } }
  }
@@ -1940,8 +1995,8 @@
    \cs_new_protected:Npn \__tag_struct_set_tag_info:nnn #1 #2 #3
      %#1 structure number, #2 tag, #3 NS
      {
-       \__tag_prop_gput:cnx
-         { g__tag_struct_#1_prop }
+       \__tag_struct_prop_gput:nne
+         { #1 }
          { S }
          { \pdf_name_from_unicode_e:n {#2}  } %
      }
@@ -1949,14 +2004,14 @@
  {
    \cs_new_protected:Npn \__tag_struct_set_tag_info:nnn #1 #2 #3
      {
-       \__tag_prop_gput:cnx
-         { g__tag_struct_#1_prop }
+       \__tag_struct_prop_gput:nne
+         { #1 }
          { S }
          { \pdf_name_from_unicode_e:n {#2} } %
        \prop_get:NnNT \g__tag_role_NS_prop {#3} \l__tag_get_tmpc_tl
          {
-           \__tag_prop_gput:cnx
-             { g__tag_struct_#1_prop }
+           \__tag_struct_prop_gput:nne
+             { #1 }
              { NS }
              { \l__tag_get_tmpc_tl } %
          }
@@ -1971,8 +2026,8 @@
          { parentrole }
          \l__tag_get_tmpc_tl
          {
-           \tl_set:Nx #2{\exp_last_unbraced:NV\use_i:nn  \l__tag_get_tmpc_tl}
-           \tl_set:Nx #3{\exp_last_unbraced:NV\use_ii:nn \l__tag_get_tmpc_tl}
+           \tl_set:Ne #2{\exp_last_unbraced:NV\use_i:nn  \l__tag_get_tmpc_tl}
+           \tl_set:Ne #3{\exp_last_unbraced:NV\use_ii:nn \l__tag_get_tmpc_tl}
          }
          {
            \tl_clear:N#2
@@ -1986,8 +2041,8 @@
       /Type \c_space_tl /MCR \c_space_tl
       /Pg
         \c_space_tl
-      \pdf_pageobject_ref:n { \__tag_ref_value:enn{mcid-#1}{tagabspage}{1} }
-       /MCID \c_space_tl \__tag_ref_value:enn{mcid-#1}{tagmcid}{1}
+      \pdf_pageobject_ref:n { \__tag_property_ref:enn{mcid-#1}{tagabspage}{1} }
+       /MCID \c_space_tl \__tag_property_ref:enn{mcid-#1}{tagmcid}{1}
      >>
   }
 \cs_new_protected:Npn \__tag_struct_kid_mc_gput_right:nn #1 #2 %#1 structure num, #2 MCID absnum%
@@ -2003,7 +2058,7 @@
         \prop_item:Nn \g__tag_struct_cont_mc_prop {#2}
       }
   }
-\cs_generate_variant:Nn \__tag_struct_kid_mc_gput_right:nn {nx}
+\cs_generate_variant:Nn \__tag_struct_kid_mc_gput_right:nn {ne}
 \cs_new_protected:Npn\__tag_struct_kid_struct_gput_right:nn #1 #2 %#1 num of parent struct, #2 kid struct
   {
     \__tag_seq_gput_right:cx
@@ -2013,7 +2068,7 @@
       }
   }
 
-\cs_generate_variant:Nn \__tag_struct_kid_struct_gput_right:nn {xx}
+\cs_generate_variant:Nn \__tag_struct_kid_struct_gput_right:nn {ee}
 \cs_new_protected:Npn\__tag_struct_kid_OBJR_gput_right:nnn #1 #2 #3 %#1 num of parent struct,
                                                              %#2 obj reference
                                                              %#3 page object reference
@@ -2029,7 +2084,7 @@
         \pdf_object_ref_last:
       }
   }
-\cs_generate_variant:Nn\__tag_struct_kid_OBJR_gput_right:nnn { xxx }
+\cs_generate_variant:Nn\__tag_struct_kid_OBJR_gput_right:nnn { eee }
 \cs_new_protected:Npn\__tag_struct_exchange_kid_command:N #1 %#1 = seq var
   {
     \seq_gpop_left:NN #1 \l__tag_tmpa_tl
@@ -2047,7 +2102,7 @@
      {
         \seq_clear:N \l__tag_tmpa_seq
         \seq_map_inline:cn { g__tag_struct_kids_#1_seq }
-         { \seq_put_right:Nx \l__tag_tmpa_seq { ##1 } }
+         { \seq_put_right:Ne \l__tag_tmpa_seq { ##1 } }
         %\seq_show:c { g__tag_struct_kids_#1_seq }
         %\seq_show:N \l__tag_tmpa_seq
         \seq_remove_all:Nn \l__tag_tmpa_seq {}
@@ -2074,7 +2129,9 @@
                \__tag_struct_exchange_kid_command:c
                 {g__tag_struct_kids_#1_seq}
              }
-           \__tag_prop_gput:cnx { g__tag_struct_#1_prop } {K}
+           \__tag_struct_prop_gput:nne
+             {#1}
+             {K}
              {
                \seq_item:cn
                  {
@@ -2085,7 +2142,9 @@
          } %
       }
       { %many kids, use an array
-        \__tag_prop_gput:cnx { g__tag_struct_#1_prop } {K}
+        \__tag_struct_prop_gput:nne
+          {#1}
+          {K}
           {
             [
               \seq_use:cn
@@ -2110,7 +2169,7 @@
          _entries_seq
       }
       {
-        \tl_put_right:Nx
+        \tl_put_right:Ne
           #2
           {
              \prop_if_in:cnT
@@ -2137,11 +2196,11 @@
       {
         \prop_get:cnNF { g__tag_struct_#1_prop } {P}\l__tag_tmpb_tl
           {
-            \prop_gput:cnx { g__tag_struct_#1_prop } {P}{\pdf_object_ref:n { __tag/struct/0  }}
-            \prop_gput:cnx { g__tag_struct_#1_prop } {S}{/Artifact}
+            \prop_gput:cne { g__tag_struct_#1_prop } {P}{\pdf_object_ref:n { __tag/struct/0  }}
+            \prop_gput:cne { g__tag_struct_#1_prop } {S}{/Artifact}
             \seq_if_empty:cF {g__tag_struct_kids_#1_seq}
               {
-                \msg_warning:nnxx
+                \msg_warning:nnee
                   {tag}
                   {struct-orphan}
                   { #1 }
@@ -2150,8 +2209,8 @@
           }
         \__tag_struct_fill_kid_key:n { #1 }
         \__tag_struct_get_dict_content:nN { #1 } \l__tag_tmpa_tl
-        \exp_args:Nx
-              \pdf_object_write:nnx
+        \exp_args:Ne
+              \pdf_object_write:nne
                 { __tag/struct/#1 }
                 {dict}
                 {
@@ -2178,8 +2237,8 @@
           }
         %put the obj number of the annot in the kid entry, this also creates
         %the OBJR object
-        \ref_label:nn {__tag_objr_page_#2 }{ tagabspage }
-        \__tag_struct_kid_OBJR_gput_right:xxx
+        \__tag_property_record:nn {@tag at objr@page@#2 }{ tagabspage }
+        \__tag_struct_kid_OBJR_gput_right:eee
           {
             \l__tag_struct_stack_parent_tmpa_tl
           }
@@ -2187,10 +2246,10 @@
             #1 %
           }
           {
-            \pdf_pageobject_ref:n { \__tag_ref_value:nnn {__tag_objr_page_#2 }{ tagabspage }{1} }
+            \pdf_pageobject_ref:n { \__tag_property_ref:nnn {@tag at objr@page@#2 }{ tagabspage }{1} }
           }
         % add the parent obj number to the parent tree:
-        \exp_args:Nnx
+        \exp_args:Nne
         \__tag_parenttree_add_objr:nn
           {
             #2
@@ -2227,9 +2286,9 @@
           {
             \int_compare_p:nNn {#1}<{\c at g__tag_struct_abs_int}
           }
-          { \tl_set:Nx \l__tag_struct_stack_parent_tmpa_tl { \int_eval:n {#1} } }
+          { \tl_set:Ne \l__tag_struct_stack_parent_tmpa_tl { \int_eval:n {#1} } }
           {
-            \msg_warning:nnxx { tag } { struct-unknown }
+            \msg_warning:nnee { tag } { struct-unknown }
               { \int_eval:n {#1} }
               { parent~key~ignored }
           }
@@ -2238,8 +2297,8 @@
     tag   .code:n        = % S property
       {
         \seq_set_split:Nne \l__tag_tmpa_seq { / } {#1/\prop_item:Ne\g__tag_role_tags_NS_prop{#1}}
-        \tl_gset:Nx \g__tag_struct_tag_tl   { \seq_item:Nn\l__tag_tmpa_seq {1} }
-        \tl_gset:Nx \g__tag_struct_tag_NS_tl{ \seq_item:Nn\l__tag_tmpa_seq {2} }
+        \tl_gset:Ne \g__tag_struct_tag_tl   { \seq_item:Nn\l__tag_tmpa_seq {1} }
+        \tl_gset:Ne \g__tag_struct_tag_NS_tl{ \seq_item:Nn\l__tag_tmpa_seq {2} }
         \__tag_check_structure_tag:N \g__tag_struct_tag_tl
       },
     title .code:n        = % T property
@@ -2249,8 +2308,8 @@
           { #1 }
           { default }
           { utf16/hex }
-        \__tag_prop_gput:cnx
-          { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+        \__tag_struct_prop_gput:nne
+          { \int_use:N \c at g__tag_struct_abs_int }
           { T }
           { <\l__tag_tmpa_str> }
       },
@@ -2261,8 +2320,8 @@
           { #1 }
           { default }
           { utf16/hex }
-        \__tag_prop_gput:cnx
-          { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+        \__tag_struct_prop_gput:nne
+          { \int_use:N \c at g__tag_struct_abs_int }
           { T }
           { <\l__tag_tmpa_str> }
       },
@@ -2275,8 +2334,8 @@
             { #1 }
             { default }
             { utf16/hex }
-          \__tag_prop_gput:cnx
-            { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+          \__tag_struct_prop_gput:nne
+            { \int_use:N \c at g__tag_struct_abs_int }
             { Alt }
             { <\l__tag_tmpa_str> }
          }
@@ -2291,8 +2350,8 @@
              { #1 }
              { default }
              { utf16/hex }
-           \__tag_prop_gput:cnx
-             { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+           \__tag_struct_prop_gput:nne
+             { \int_use:N \c at g__tag_struct_abs_int }
              { ActualText }
              { <\l__tag_tmpa_str>}
           }
@@ -2299,8 +2358,8 @@
       },
     lang .code:n        = % Lang property
       {
-        \__tag_prop_gput:cnx
-          { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+        \__tag_struct_prop_gput:nne
+          { \int_use:N \c at g__tag_struct_abs_int }
           { Lang }
           { (#1) }
       },
@@ -2309,10 +2368,11 @@
         \tl_clear:N\l__tag_tmpa_tl
         \clist_map_inline:on {#1}
           {
-            \tl_put_right:Nx \l__tag_tmpa_tl
-              {~\ref_value:nn{tagpdfstruct-##1}{tagstructobj} }
+            \tl_put_right:Ne \l__tag_tmpa_tl
+              {~\__tag_property_ref:en{tagpdfstruct-##1}{tagstructobj} }
           }
-        \__tag_struct_gput_data_ref:ee { \int_eval:n {\c at g__tag_struct_abs_int} } {\l__tag_tmpa_tl}
+        \__tag_struct_gput_data_ref:ee
+         { \int_use:N \c at g__tag_struct_abs_int } {\l__tag_tmpa_tl}
       },
     E .code:n        = % E property
       {
@@ -2321,8 +2381,8 @@
           { #1 }
           { default }
           { utf16/hex }
-        \__tag_prop_gput:cnx
-          { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+        \__tag_struct_prop_gput:nne
+          { \int_use:N \c at g__tag_struct_abs_int }
           { E }
           { <\l__tag_tmpa_str> }
       },
@@ -2342,10 +2402,10 @@
               {tag-AFfile\int_use:N\g__tag_struct_AFobj_int.#2}
               {__tag/fileobj\int_use:N\g__tag_struct_AFobj_int}
             \__tag_struct_add_AF:ee
-              { \int_eval:n {\c at g__tag_struct_abs_int} }
+              { \int_use:N \c at g__tag_struct_abs_int }
               { \pdf_object_ref:e {__tag/fileobj\int_use:N\g__tag_struct_AFobj_int} }
-            \__tag_prop_gput:cnx
-              { g__tag_struct_\int_use:N\c at g__tag_struct_abs_int _prop }
+            \__tag_struct_prop_gput:nne
+              { \int_use:N \c at g__tag_struct_abs_int }
               { AF }
               {
                 [
@@ -2369,10 +2429,10 @@
           {tag-AFfile\int_use:N\g__tag_struct_AFobj_int.#2}
           \l__tag_tmpa_tl
           \__tag_struct_add_AF:ee
-            { \int_eval:n {\c at g__tag_struct_abs_int} }
+            { \int_use:N \c at g__tag_struct_abs_int }
             { \l__tag_tmpa_tl }
-          \__tag_prop_gput:cnx
-            { g__tag_struct_\int_use:N\c at g__tag_struct_abs_int _prop }
+          \__tag_struct_prop_gput:nne
+            { \int_use:N \c at g__tag_struct_abs_int }
             { AF }
             {
               [
@@ -2391,7 +2451,7 @@
          g__tag_struct_#1_AF_tl
        }
        {
-         \tl_gput_right:cx
+         \tl_gput_right:ce
            { g__tag_struct_#1_AF_tl }
            {  \c_space_tl #2 }
        }
@@ -2398,7 +2458,7 @@
        {
           \tl_new:c
             { g__tag_struct_#1_AF_tl }
-          \tl_gset:cx
+          \tl_gset:ce
             { g__tag_struct_#1_AF_tl }
             { #2 }
        }
@@ -2410,9 +2470,9 @@
       {
         \pdf_object_if_exist:nTF {#1}
           {
-            \__tag_struct_add_AF:ee { \int_eval:n {\c at g__tag_struct_abs_int} }{\pdf_object_ref:n {#1}}
-            \__tag_prop_gput:cnx
-             { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+            \__tag_struct_add_AF:ee { \int_use:N \c at g__tag_struct_abs_int }{\pdf_object_ref:n {#1}}
+            \__tag_struct_prop_gput:nne
+             { \int_use:N \c at g__tag_struct_abs_int }
              { AF }
              {
                [
@@ -2422,7 +2482,7 @@
              }
           }
           {
-
+             % message?
           }
       },
    ,AFinline .code:n =
@@ -2451,8 +2511,8 @@
         \pdf_object_if_exist:nTF {#1}
           {
             \__tag_struct_add_AF:ee { 0 }{\pdf_object_ref:n {#1}}
-            \__tag_prop_gput:cnx
-             { g__tag_struct_0_prop }
+            \__tag_struct_prop_gput:nne
+             { 0 }
              { AF }
              {
                [
@@ -2478,21 +2538,23 @@
         \exp_args:Ne
           \pdf_object_new:n
             { __tag/struct/\int_eval:n { \c at g__tag_struct_abs_int } }
-        \__tag_prop_gput:cno
-          { g__tag_struct_\int_eval:n { \c at g__tag_struct_abs_int }_prop }
-          { Type }
-          { /StructElem }
+         \__tag_struct_prop_gput:nnn
+            { \int_use:N \c at g__tag_struct_abs_int }
+            { Type }
+            { /StructElem }
         \tl_set:Nn \l__tag_struct_stack_parent_tmpa_tl {-1}
         \keys_set:nn { __tag / struct} { #1 }
         \__tag_struct_set_tag_info:eVV
-          { \int_eval:n {\c at g__tag_struct_abs_int} }
+          { \int_use:N \c at g__tag_struct_abs_int }
            \g__tag_struct_tag_tl
            \g__tag_struct_tag_NS_tl
-        \__tag_check_structure_has_tag:n { \int_eval:n {\c at g__tag_struct_abs_int} }
+        \__tag_check_structure_has_tag:n { \int_use:N \c at g__tag_struct_abs_int }
         \tl_if_empty:NF
           \l__tag_struct_key_label_tl
           {
-            \__tag_ref_label:en{tagpdfstruct-\l__tag_struct_key_label_tl}{struct}
+            \__tag_property_record:eV
+             {tagpdfstruct-\l__tag_struct_key_label_tl}
+             \c__tag_property_struct_clist
           }
         \int_compare:nNnT { \l__tag_struct_stack_parent_tmpa_tl } = { -1 }
           {
@@ -2509,12 +2571,12 @@
           \g__tag_struct_tag_NS_tl
           \l__tag_struct_roletag_tl
           \l__tag_struct_roletag_NS_tl
-        \__tag_prop_gput:cnx
-              { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
-              { rolemap }
-              {
-                {\l__tag_struct_roletag_tl}{\l__tag_struct_roletag_NS_tl}
-              }
+         \__tag_struct_prop_gput:nne
+           { \int_use:N \c at g__tag_struct_abs_int }
+           { rolemap }
+           {
+             {\l__tag_struct_roletag_tl}{\l__tag_struct_roletag_NS_tl}
+           }
         \str_case:VnTF \l__tag_struct_roletag_tl
          {
            {Part} {}
@@ -2527,8 +2589,8 @@
             { parentrole }
             \l__tag_get_tmpc_tl
             {
-              \__tag_prop_gput:cno
-                { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+              \__tag_struct_prop_gput:nno
+                { \int_use:N \c at g__tag_struct_abs_int }
                 { parentrole }
                 {
                   \l__tag_get_tmpc_tl
@@ -2536,14 +2598,14 @@
             }
          }
          {
-           \__tag_prop_gput:cnx
-              { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+            \__tag_struct_prop_gput:nne
+              { \int_use:N \c at g__tag_struct_abs_int }
               { parentrole }
               {
                 {\l__tag_struct_roletag_tl}{\l__tag_struct_roletag_NS_tl}
               }
          }
-        \seq_gpush:Nx \g__tag_struct_tag_stack_seq
+        \seq_gpush:Ne \g__tag_struct_tag_stack_seq
           {{\g__tag_struct_tag_tl}{\l__tag_struct_roletag_tl}}
         \tl_gset:NV   \g__tag_struct_stack_current_tl \c at g__tag_struct_abs_int
         %\seq_show:N   \g__tag_struct_stack_seq
@@ -2566,7 +2628,7 @@
                   { g__tag_struct_ \l__tag_struct_stack_parent_tmpa_tl _prop}
                   {S}
                   \l__tag_tmpa_tl
-                \msg_warning:nnxxx
+                \msg_warning:nneee
                  { tag }
                  {role-parent-child}
                  { \l__tag_get_parent_tmpa_tl/\l__tag_get_parent_tmpb_tl }
@@ -2581,12 +2643,12 @@
                 \cs_gset_eq:NN \g__tag_struct_tag_tl \l__tag_role_remap_tag_tl
                 \cs_gset_eq:NN  \g__tag_struct_tag_NS_tl \l__tag_role_remap_NS_tl
                 \__tag_struct_set_tag_info:eVV
-                  { \int_eval:n {\c at g__tag_struct_abs_int} }
+                  { \int_use:N \c at g__tag_struct_abs_int }
                     \g__tag_struct_tag_tl
                     \g__tag_struct_tag_NS_tl
               }
-            \__tag_prop_gput:cnx
-              { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+             \__tag_struct_prop_gput:nne
+              { \int_use:N \c at g__tag_struct_abs_int }
               { P }
               {
                 \pdf_object_ref:e { __tag/struct/\l__tag_struct_stack_parent_tmpa_tl }
@@ -2594,7 +2656,7 @@
             %record this structure as kid:
             %\tl_show:N \g__tag_struct_stack_current_tl
             %\tl_show:N \l__tag_struct_stack_parent_tmpa_tl
-            \__tag_struct_kid_struct_gput_right:xx
+            \__tag_struct_kid_struct_gput_right:ee
                { \l__tag_struct_stack_parent_tmpa_tl }
                { \g__tag_struct_stack_current_tl }
             %\prop_show:c { g__tag_struct_\g__tag_struct_stack_current_tl _prop }
@@ -2627,11 +2689,11 @@
           }
        \seq_get:NNT \g__tag_struct_tag_stack_seq \l__tag_tmpa_tl
           {
-            \tl_gset:Nx \g__tag_struct_tag_tl
+            \tl_gset:Ne \g__tag_struct_tag_tl
               { \exp_last_unbraced:NV\use_i:nn \l__tag_tmpa_tl }
             \prop_get:NVNT\g__tag_role_tags_NS_prop \g__tag_struct_tag_tl\l__tag_tmpa_tl
              {
-               \tl_gset:Nx \g__tag_struct_tag_NS_tl { \l__tag_tmpa_tl }
+               \tl_gset:Ne \g__tag_struct_tag_NS_tl { \l__tag_tmpa_tl }
              }
           }
       }
@@ -2646,22 +2708,22 @@
     \__tag_check_if_active_struct:T
       {
         \prop_if_exist:cTF
-          { g__tag_struct_\__tag_ref_value:enn{tagpdfstruct-#1}{tagstruct}{unknown}_prop } %
+          { g__tag_struct_\__tag_property_ref:enn{tagpdfstruct-#1}{tagstruct}{unknown}_prop } %
           {
             \__tag_check_struct_used:n {#1}
             %add the label structure as kid to the current structure (can be the root)
-            \__tag_struct_kid_struct_gput_right:xx
+            \__tag_struct_kid_struct_gput_right:ee
               { \g__tag_struct_stack_current_tl }
-              { \__tag_ref_value:enn{tagpdfstruct-#1}{tagstruct}{0} }
+              { \__tag_property_ref:enn{tagpdfstruct-#1}{tagstruct}{0} }
             %add the current structure to the labeled one as parents
             \__tag_prop_gput:cnx
-              { g__tag_struct_\__tag_ref_value:enn{tagpdfstruct-#1}{tagstruct}{0}_prop }
+              { g__tag_struct_\__tag_property_ref:enn{tagpdfstruct-#1}{tagstruct}{0}_prop }
               { P }
               {
                 \pdf_object_ref:e { __tag/struct/\g__tag_struct_stack_current_tl }
               }
              \__tag_struct_get_parentrole:eNN
-              {\__tag_ref_value:enn{tagpdfstruct-#1}{tagstruct}{0}}
+              {\__tag_property_ref:enn{tagpdfstruct-#1}{tagstruct}{0}}
               \l__tag_tmpa_tl
               \l__tag_tmpb_tl
             \__tag_check_parent_child:VVVVN
@@ -2678,7 +2740,7 @@
                 \cs_gset_eq:NN \g__tag_struct_tag_tl \l__tag_role_remap_tag_tl
                 \cs_gset_eq:NN  \g__tag_struct_tag_NS_tl \l__tag_role_remap_NS_tl
                 \__tag_struct_set_tag_info:eVV
-                  { \int_eval:n {\c at g__tag_struct_abs_int} }
+                  { \int_use:N \c at g__tag_struct_abs_int }
                     \g__tag_struct_tag_tl
                     \g__tag_struct_tag_NS_tl
               }
@@ -2703,12 +2765,12 @@
                 \msg_warning:nnn { tag } {struct-used-twice} {#1}
               }
             %add the label structure as kid to the current structure (can be the root)
-            \__tag_struct_kid_struct_gput_right:xx
+            \__tag_struct_kid_struct_gput_right:ee
               { \g__tag_struct_stack_current_tl }
               { #1 }
             %add the current structure to the labeled one as parents
-            \__tag_prop_gput:cnx
-              { g__tag_struct_#1_prop }
+             \__tag_struct_prop_gput:nne
+              { #1 }
               { P }
               {
                 \pdf_object_ref:e { __tag/struct/\g__tag_struct_stack_current_tl }
@@ -2731,7 +2793,7 @@
                 \cs_gset_eq:NN \g__tag_struct_tag_tl \l__tag_role_remap_tag_tl
                 \cs_gset_eq:NN  \g__tag_struct_tag_NS_tl \l__tag_role_remap_NS_tl
                 \__tag_struct_set_tag_info:eVV
-                  { \int_eval:n {\c at g__tag_struct_abs_int} }
+                  { \int_use:N \c at g__tag_struct_abs_int }
                     \g__tag_struct_tag_tl
                     \g__tag_struct_tag_NS_tl
               }
@@ -2756,19 +2818,18 @@
  }
 \cs_generate_variant:Nn \tag_struct_gput:nnn {ene,nne}
 \cs_new_protected:Npn \__tag_struct_gput_data_ref:nn #1 #2
-   % #1 receiving struct num, #2 list of object ref
+  % #1 receiving struct num, #2 list of object ref
    {
      \prop_get:cnN
         { g__tag_struct_#1_prop }
         {Ref}
         \l__tag_get_tmpc_tl
-     \__tag_prop_gput:cnx
-        { g__tag_struct_#1_prop }
+     \__tag_struct_prop_gput:nne
+        { #1 }
         { Ref }
         { \quark_if_no_value:NF\l__tag_get_tmpc_tl { \l__tag_get_tmpc_tl\c_space_tl }#2 }
     }
 \cs_generate_variant:Nn \__tag_struct_gput_data_ref:nn {ee}
-
 \cs_new_protected:Npn \tag_struct_insert_annot:nn #1 #2 %#1 should be an object reference
                                                         %#2 struct parent num
   {
@@ -2778,7 +2839,7 @@
       }
   }
 
-\cs_generate_variant:Nn \tag_struct_insert_annot:nn {xx}
+\cs_generate_variant:Nn \tag_struct_insert_annot:nn {xx,ee}
 \cs_new:Npn \tag_struct_parent_int: {\int_use:c { c at g__tag_parenttree_obj_int }}
 
 
@@ -2799,13 +2860,20 @@
         \__tag_attr_new_entry:nn #1
       }
   }
+\cs_if_free:NTF \seq_set_map_e:NNn
+  {
+    \cs_new_eq:NN \__tag_seq_set_map_e:NNn \seq_set_map_x:NNn
+  }
+  {
+    \cs_new_eq:NN \__tag_seq_set_map_e:NNn \seq_set_map_e:NNn
+  }
 \keys_define:nn { __tag / struct }
   {
     attribute-class .code:n =
      {
-       \clist_set:Nx \l__tag_tmpa_clist { #1 }
+       \clist_set:Ne \l__tag_tmpa_clist { #1 }
        \seq_set_from_clist:NN \l__tag_tmpb_seq \l__tag_tmpa_clist
-       \seq_set_map_x:NNn \l__tag_tmpa_seq \l__tag_tmpb_seq
+       \__tag_seq_set_map_e:NNn \l__tag_tmpa_seq \l__tag_tmpb_seq
          {
            \pdf_name_from_unicode_e:n {##1}
          }
@@ -2817,7 +2885,7 @@
              }
            \seq_gput_left:Nn\g__tag_attr_class_used_seq { ##1}
          }
-       \tl_set:Nx \l__tag_tmpa_tl
+       \tl_set:Ne \l__tag_tmpa_tl
          {
            \int_compare:nT { \seq_count:N \l__tag_tmpa_seq > 1 }{[}
            \seq_use:Nn \l__tag_tmpa_seq  { \c_space_tl  }
@@ -2825,8 +2893,8 @@
          }
        \int_compare:nT { \seq_count:N \l__tag_tmpa_seq > 0 }
          {
-           \__tag_prop_gput:cnx
-             { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+           \__tag_struct_prop_gput:nne
+             { \int_use:N \c at g__tag_struct_abs_int }
              { C }
              { \l__tag_tmpa_tl }
           %\prop_show:c  { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
@@ -2837,15 +2905,15 @@
   {
     attribute .code:n  = % A property (attribute, value currently a dictionary)
       {
-        \clist_set:Nx          \l__tag_tmpa_clist { #1 }
+        \clist_set:Ne          \l__tag_tmpa_clist { #1 }
         \clist_if_empty:NF \l__tag_tmpa_clist
          {
             \seq_set_from_clist:NN \l__tag_tmpb_seq \l__tag_tmpa_clist
-           \seq_set_map_x:NNn \l__tag_tmpa_seq \l__tag_tmpb_seq
+           \__tag_seq_set_map_e:NNn \l__tag_tmpa_seq \l__tag_tmpb_seq
              {
                \pdf_name_from_unicode_e:n {##1}
              }
-            \tl_set:Nx \l__tag_attr_value_tl
+            \tl_set:Ne \l__tag_attr_value_tl
               {
                 \int_compare:nT { \seq_count:N \l__tag_tmpa_seq > 1 }{[}%]
               }
@@ -2857,14 +2925,14 @@
                   }
                 \prop_if_in:NnF \g__tag_attr_objref_prop {##1}
                   {%\prop_show:N \g__tag_attr_entries_prop
-                    \pdf_object_unnamed_write:nx
+                    \pdf_object_unnamed_write:ne
                       { dict }
                       {
                         \prop_item:Nn\g__tag_attr_entries_prop {##1}
                       }
-                    \prop_gput:Nnx \g__tag_attr_objref_prop {##1} {\pdf_object_ref_last:}
+                    \prop_gput:Nne \g__tag_attr_objref_prop {##1} {\pdf_object_ref_last:}
                   }
-                \tl_put_right:Nx \l__tag_attr_value_tl
+                \tl_put_right:Ne \l__tag_attr_value_tl
                   {
                     \c_space_tl
                     \prop_item:Nn \g__tag_attr_objref_prop {##1}
@@ -2871,13 +2939,13 @@
                   }
      %     \tl_show:N \l__tag_attr_value_tl
               }
-            \tl_put_right:Nx \l__tag_attr_value_tl
+            \tl_put_right:Ne \l__tag_attr_value_tl
               { %[
                 \int_compare:nT { \seq_count:N \l__tag_tmpa_seq > 1 }{]}%
               }
      %     \tl_show:N \l__tag_attr_value_tl
-            \__tag_prop_gput:cnx
-              { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+            \__tag_struct_prop_gput:nne
+              { \int_use:N \c at g__tag_struct_abs_int }
               { A }
               { \l__tag_attr_value_tl }
          }

Modified: trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdfdocu-patches.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdfdocu-patches.sty	2023-10-27 19:58:06 UTC (rev 68675)
+++ trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdfdocu-patches.sty	2023-10-27 19:58:21 UTC (rev 68676)
@@ -1,5 +1,5 @@
 %\RequirePackage[enable-debug]{expl3}[2018/06/14]
-\ProvidesExplPackage {tagpdfdocu-patches} {2023-08-30} {0.98l}
+\ProvidesExplPackage {tagpdfdocu-patches} {2023-10-27} {0.98m}
  {patches/commands for the tagpdf documentation}
 \RequirePackage{etoolbox,xpatch}
 



More information about the tex-live-commits mailing list.