summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2023-10-27 19:58:21 +0000
committerKarl Berry <karl@freefriends.org>2023-10-27 19:58:21 +0000
commit3166e6ef8fb8bc54d43ef4c07ddaf9935f5e4857 (patch)
tree4edbc7846f7ee76cb3fa98769effb8d7ccdfaaf7 /Master/texmf-dist/source
parent1bd4d7592d3d26ea9d6b670d267f81c11285920d (diff)
tagpdf (27oct23)
git-svn-id: svn://tug.org/texlive/trunk@68676 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r--Master/texmf-dist/source/latex/tagpdf/tagpdf-backend.dtx8
-rw-r--r--Master/texmf-dist/source/latex/tagpdf/tagpdf-checks.dtx14
-rw-r--r--Master/texmf-dist/source/latex/tagpdf/tagpdf-data.dtx18
-rw-r--r--Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-generic.dtx22
-rw-r--r--Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-luacode.dtx6
-rw-r--r--Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-shared.dtx10
-rw-r--r--Master/texmf-dist/source/latex/tagpdf/tagpdf-roles.dtx4
-rw-r--r--Master/texmf-dist/source/latex/tagpdf/tagpdf-space.dtx4
-rw-r--r--Master/texmf-dist/source/latex/tagpdf/tagpdf-struct.dtx366
-rw-r--r--Master/texmf-dist/source/latex/tagpdf/tagpdf-tree.dtx16
-rw-r--r--Master/texmf-dist/source/latex/tagpdf/tagpdf-user.dtx4
-rw-r--r--Master/texmf-dist/source/latex/tagpdf/tagpdf.dtx258
-rw-r--r--Master/texmf-dist/source/latex/tagpdf/tagpdf.ins2
13 files changed, 418 insertions, 314 deletions
diff --git a/Master/texmf-dist/source/latex/tagpdf/tagpdf-backend.dtx b/Master/texmf-dist/source/latex/tagpdf/tagpdf-backend.dtx
index fd13c8fd7ea..d6fcd70ff08 100644
--- a/Master/texmf-dist/source/latex/tagpdf/tagpdf-backend.dtx
+++ b/Master/texmf-dist/source/latex/tagpdf/tagpdf-backend.dtx
@@ -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"
}
diff --git a/Master/texmf-dist/source/latex/tagpdf/tagpdf-checks.dtx b/Master/texmf-dist/source/latex/tagpdf/tagpdf-checks.dtx
index 68123ff86c9..dc1456ea308 100644
--- a/Master/texmf-dist/source/latex/tagpdf/tagpdf-checks.dtx
+++ b/Master/texmf-dist/source/latex/tagpdf/tagpdf-checks.dtx
@@ -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,14 +898,14 @@
{1}
{1}
{
- \@@_ref_value_lastpage:nn
+ \@@_property_ref_lastpage:nn
{tagmcabs}
{-1}
}
{
\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}
diff --git a/Master/texmf-dist/source/latex/tagpdf/tagpdf-data.dtx b/Master/texmf-dist/source/latex/tagpdf/tagpdf-data.dtx
index f5e3ca8c73b..7ad2a3f327d 100644
--- a/Master/texmf-dist/source/latex/tagpdf/tagpdf-data.dtx
+++ b/Master/texmf-dist/source/latex/tagpdf/tagpdf-data.dtx
@@ -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 @@ text, P, pdf2,
% 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 @@ subparagraph, H6,pdf2,
% 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 @@ P, Span, pdf2,
% \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 @@ Strong,Span,pdf,I,
% \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 @@ Strong,Strong,pdf2,I,
% \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 @@ xor,xor,mathml,
% 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 @@ MC,both,---,∅,∅,∅,∅,∅,∅,0..n,‡,∅,∅,∅,0..n,0..n,0..n,0..n,0..
% 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,∅
diff --git a/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-generic.dtx b/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-generic.dtx
index 13551c9a5c5..d1f6441a568 100644
--- a/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-generic.dtx
+++ b/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-generic.dtx
@@ -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@g_@@_MCID_abs_int
- \@@_ref_label:en
+ \@@_property_record:eV
{
mcid-\int_use:N \c@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@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@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@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 } }
diff --git a/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-luacode.dtx b/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-luacode.dtx
index 066badb9c45..7066237b76e 100644
--- a/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-luacode.dtx
+++ b/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-luacode.dtx
@@ -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}
diff --git a/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-shared.dtx b/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-shared.dtx
index 1fd9ebc559a..e18f7bd1b0b 100644
--- a/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-shared.dtx
+++ b/Master/texmf-dist/source/latex/tagpdf/tagpdf-mc-shared.dtx
@@ -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}
diff --git a/Master/texmf-dist/source/latex/tagpdf/tagpdf-roles.dtx b/Master/texmf-dist/source/latex/tagpdf/tagpdf-roles.dtx
index 0e33e7d1af7..36b46394765 100644
--- a/Master/texmf-dist/source/latex/tagpdf/tagpdf-roles.dtx
+++ b/Master/texmf-dist/source/latex/tagpdf/tagpdf-roles.dtx
@@ -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}
diff --git a/Master/texmf-dist/source/latex/tagpdf/tagpdf-space.dtx b/Master/texmf-dist/source/latex/tagpdf/tagpdf-space.dtx
index 249460dc722..191a645b123 100644
--- a/Master/texmf-dist/source/latex/tagpdf/tagpdf-space.dtx
+++ b/Master/texmf-dist/source/latex/tagpdf/tagpdf-space.dtx
@@ -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}
diff --git a/Master/texmf-dist/source/latex/tagpdf/tagpdf-struct.dtx b/Master/texmf-dist/source/latex/tagpdf/tagpdf-struct.dtx
index 9e5fbe7fa69..263ae03cfa8 100644
--- a/Master/texmf-dist/source/latex/tagpdf/tagpdf-struct.dtx
+++ b/Master/texmf-dist/source/latex/tagpdf/tagpdf-struct.dtx
@@ -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,60 +493,62 @@
% 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.
% \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}
%
@@ -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@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@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@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@g_@@_struct_abs_int}_prop }
+ \@@_struct_prop_gput:nne
+ { \int_use:N \c@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@g_@@_struct_abs_int}_prop }
+ \@@_struct_prop_gput:nne
+ { \int_use:N \c@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@g_@@_struct_abs_int}_prop }
+ \@@_struct_prop_gput:nne
+ { \int_use:N \c@g_@@_struct_abs_int }
{ Alt }
{ <\l_@@_tmpa_str> }
}
@@ -1117,16 +1142,16 @@
{ #1 }
{ default }
{ utf16/hex }
- \@@_prop_gput:cnx
- { g_@@_struct_\int_eval:n {\c@g_@@_struct_abs_int}_prop }
+ \@@_struct_prop_gput:nne
+ { \int_use:N \c@g_@@_struct_abs_int }
{ ActualText }
{ <\l_@@_tmpa_str>}
}
},
lang .code:n = % Lang property
{
- \@@_prop_gput:cnx
- { g_@@_struct_\int_eval:n {\c@g_@@_struct_abs_int}_prop }
+ \@@_struct_prop_gput:nne
+ { \int_use:N \c@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@g_@@_struct_abs_int} } {\l_@@_tmpa_tl}
+ \@@_struct_gput_data_ref:ee
+ { \int_use:N \c@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@g_@@_struct_abs_int}_prop }
+ \@@_struct_prop_gput:nne
+ { \int_use:N \c@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@g_@@_struct_abs_int} }
+ { \int_use:N \c@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@g_@@_struct_abs_int _prop }
+ \@@_struct_prop_gput:nne
+ { \int_use:N \c@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@g_@@_struct_abs_int} }
+ { \int_use:N \c@g_@@_struct_abs_int }
{ \l_@@_tmpa_tl }
- \@@_prop_gput:cnx
- { g_@@_struct_\int_use:N\c@g_@@_struct_abs_int _prop }
+ \@@_struct_prop_gput:nne
+ { \int_use:N \c@g_@@_struct_abs_int }
{ AF }
{
[
@@ -1243,14 +1269,14 @@
g_@@_struct_#1_AF_tl
}
{
- \tl_gput_right:cx
+ \tl_gput_right:ce
{ g_@@_struct_#1_AF_tl }
{ \c_space_tl #2 }
}
{
\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@g_@@_struct_abs_int} }{\pdf_object_ref:n {#1}}
- \@@_prop_gput:cnx
- { g_@@_struct_\int_eval:n {\c@g_@@_struct_abs_int}_prop }
+ \@@_struct_add_AF:ee { \int_use:N \c@g_@@_struct_abs_int }{\pdf_object_ref:n {#1}}
+ \@@_struct_prop_gput:nne
+ { \int_use:N \c@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@g_@@_struct_abs_int } }
- \@@_prop_gput:cno
- { g_@@_struct_\int_eval:n { \c@g_@@_struct_abs_int }_prop }
- { Type }
- { /StructElem }
+ \@@_struct_prop_gput:nnn
+ { \int_use:N \c@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@g_@@_struct_abs_int} }
+ { \int_use:N \c@g_@@_struct_abs_int }
\g_@@_struct_tag_tl
\g_@@_struct_tag_NS_tl
- \@@_check_structure_has_tag:n { \int_eval:n {\c@g_@@_struct_abs_int} }
+ \@@_check_structure_has_tag:n { \int_use:N \c@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@g_@@_struct_abs_int}_prop }
- { rolemap }
- {
- {\l_@@_struct_roletag_tl}{\l_@@_struct_roletag_NS_tl}
- }
+ \@@_struct_prop_gput:nne
+ { \int_use:N \c@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@g_@@_struct_abs_int}_prop }
+ \@@_struct_prop_gput:nno
+ { \int_use:N \c@g_@@_struct_abs_int }
{ parentrole }
{
\l_@@_get_tmpc_tl
@@ -1426,8 +1454,8 @@
}
}
{
- \@@_prop_gput:cnx
- { g_@@_struct_\int_eval:n {\c@g_@@_struct_abs_int}_prop }
+ \@@_struct_prop_gput:nne
+ { \int_use:N \c@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@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,15 +1506,15 @@
\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@g_@@_struct_abs_int} }
+ { \int_use:N \c@g_@@_struct_abs_int }
\g_@@_struct_tag_tl
\g_@@_struct_tag_NS_tl
}
% \end{macrocode}
% Set the Parent.
% \begin{macrocode}
- \@@_prop_gput:cnx
- { g_@@_struct_\int_eval:n {\c@g_@@_struct_abs_int}_prop }
+ \@@_struct_prop_gput:nne
+ { \int_use:N \c@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@g_@@_struct_abs_int}_prop }
%<debug> { g_@@_struct_\int_eval:n {\c@g_@@_struct_abs_int}_prop }
-%<debug> \prop_gput:cnx
+%<debug> \prop_gput:cne
%<debug> { g_@@_struct_debug_\int_eval:n {\c@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@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,27 +1634,20 @@
% \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@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
% 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@g_@@_struct_abs_int} }
+ { \int_use:N \c@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@g_@@_struct_abs_int} }
+ { \int_use:N \c@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,31 +1787,33 @@
{#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 }
}
\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@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@g_@@_struct_abs_int}_prop }
+ \@@_struct_prop_gput:nne
+ { \int_use:N \c@g_@@_struct_abs_int }
{ C }
{ \l_@@_tmpa_tl }
%\prop_show:c { g_@@_struct_\int_eval:n {\c@g_@@_struct_abs_int}_prop }
@@ -1921,18 +1969,18 @@
{
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
% \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,27 +1992,27 @@
}
\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}
}
% \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@g_@@_struct_abs_int}_prop }
+ \@@_struct_prop_gput:nne
+ { \int_use:N \c@g_@@_struct_abs_int }
{ A }
{ \l_@@_attr_value_tl }
}
diff --git a/Master/texmf-dist/source/latex/tagpdf/tagpdf-tree.dtx b/Master/texmf-dist/source/latex/tagpdf/tagpdf-tree.dtx
index c84ad8a8c5c..41298b2d692 100644
--- a/Master/texmf-dist/source/latex/tagpdf/tagpdf-tree.dtx
+++ b/Master/texmf-dist/source/latex/tagpdf/tagpdf-tree.dtx
@@ -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@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}}
}
}
diff --git a/Master/texmf-dist/source/latex/tagpdf/tagpdf-user.dtx b/Master/texmf-dist/source/latex/tagpdf/tagpdf-user.dtx
index 518a3418128..339d79e1db0 100644
--- a/Master/texmf-dist/source/latex/tagpdf/tagpdf-user.dtx
+++ b/Master/texmf-dist/source/latex/tagpdf/tagpdf-user.dtx
@@ -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}
diff --git a/Master/texmf-dist/source/latex/tagpdf/tagpdf.dtx b/Master/texmf-dist/source/latex/tagpdf/tagpdf.dtx
index be94a640706..668d085169e 100644
--- a/Master/texmf-dist/source/latex/tagpdf/tagpdf.dtx
+++ b/Master/texmf-dist/source/latex/tagpdf/tagpdf.dtx
@@ -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@g_@@_MCID_abs_int }
- {tagstruct}{\int_use:N \c@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@label@record
+ {@tag@LastPage}
+ {
+ {abspage} { \int_use:N \g_shipout_readonly_int}
+ {tagmcabs}{ \int_use:N \c@g_@@_MCID_abs_int }
+ {tagstruct}{\int_use:N \c@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@LastPage}
+ {
+ {abspage} { \int_use:N \g_shipout_readonly_int}
+ {tagmcabs}{ \int_use:N \c@g_@@_MCID_abs_int }
+ {tagstruct}{\int_use:N \c@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@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@LastPage}{#1}{#2}
+ }
+% \end{macrocode}
+%\end{macro}
% \section{Setup label attributes}
% \begin{macro}{tagstruct,tagstructobj,tagabspage,tagmcabs,tagmcid}
@@ -385,68 +480,29 @@
% 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@g_@@_struct_abs_int }
-\ref_attribute_gset:nnnn { tagstructobj } {} { now }
+\@@_property_new:nnnn
+ { tagstruct } { now }
+ {0} { \int_use:N \c@g_@@_struct_abs_int }
+\@@_property_new:nnnn { tagstructobj } { now } {}
{
\pdf_object_if_exist:eT {@@/struct/\int_use:N \c@g__tag_struct_abs_int}
{
\pdf_object_ref:e{@@/struct/\int_use:N \c@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@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@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,
diff --git a/Master/texmf-dist/source/latex/tagpdf/tagpdf.ins b/Master/texmf-dist/source/latex/tagpdf/tagpdf.ins
index d17e709b25f..bdb9b2d1c22 100644
--- a/Master/texmf-dist/source/latex/tagpdf/tagpdf.ins
+++ b/Master/texmf-dist/source/latex/tagpdf/tagpdf.ins
@@ -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