summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/pdfmanagement-testphase
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-12-10 03:03:07 +0000
committerNorbert Preining <norbert@preining.info>2023-12-10 03:03:07 +0000
commit4d14c5388a9581dee1111261078e6141963ec24f (patch)
tree52553457b5385303c1ce97dcfa6e070ccd0235e7 /macros/latex/contrib/pdfmanagement-testphase
parent1bac51c9be71358b55925783e16f3d8bc03d630b (diff)
CTAN sync 202312100303
Diffstat (limited to 'macros/latex/contrib/pdfmanagement-testphase')
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md15
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/README.md2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx500
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdfbin961151 -> 967468 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx14
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdfbin704199 -> 704238 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx7
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdfbin606092 -> 606135 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdfbin515694 -> 515546 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdfbin559040 -> 558914 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdfbin542123 -> 542009 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdfbin544422 -> 544276 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdfbin537538 -> 537399 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdfbin594612 -> 594480 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdfbin516740 -> 516613 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdfbin750981 -> 751043 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdfbin566955 -> 566778 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdfbin682850 -> 682685 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx228
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdfbin815060 -> 831131 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdfbin532095 -> 532070 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdfbin427405 -> 427137 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdfbin587741 -> 587463 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdfbin448754 -> 448729 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx11
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdfbin464434 -> 463665 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty2
43 files changed, 577 insertions, 250 deletions
diff --git a/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md b/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md
index c3bc86cfc0..9076adab08 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md
+++ b/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md
@@ -6,6 +6,21 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
this project uses date-based 'snapshot' version identifiers.
## [2023-11-17]
+Version: 2023-12-09, 0.96d
+
+### Removed
+
+ - l3bitset is now provided by l3kernel.
+
+### Added
+ - 2023-11-20: l3pdfmeta.dtx: support for PDF declarations in XMP metadata, issue #58
+ - hyperref-generic.dtx: option nested-links key to suppress nested links.
+
+### Changed
+ - key family in hyperref-generic is now hyp and not hyp/setup
+ - do not use pdfuaid:rev with pdf/UA-1
+
+## [2023-11-17]
Version: 2023-11-17, 0.96c
- remove dependency to ltxcmds in the hyperref driver
diff --git a/macros/latex/contrib/pdfmanagement-testphase/README.md b/macros/latex/contrib/pdfmanagement-testphase/README.md
index 94a0136f3d..e0b527353f 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/README.md
+++ b/macros/latex/contrib/pdfmanagement-testphase/README.md
@@ -1,6 +1,6 @@
# LaTeX PDF management testphase bundle
-Version: 0.96c, 2023-11-17
+Version: 0.96d, 2023-12-09
This package is used during a test phase to load the new PDF management code
of LaTeX.
diff --git a/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty
index 6b86bc4c17..fb44b9e726 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty
+++ b/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty
@@ -24,7 +24,7 @@
%% This file has the LPPL maintenance status "maintained".
%%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesPackage{color-ltx}[2023-11-17 v0.96c
+\ProvidesPackage{color-ltx}[2023-12-09 v0.96d
Standard LaTeX Color (patched for l3color, part of pdfmanagement-testphase, original version 2022/01/06 v1.3d) (DPC)]
\edef\Gin@codes{%
\catcode`\noexpand\^^A\the\catcode`\^^A\relax
diff --git a/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
index c6f186877a..21609d988b 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
+++ b/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
@@ -19,7 +19,7 @@
%
% for those people who are interested.
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
-\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2023-11-17}{0.96c}
+\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2023-12-09}{0.96d}
{temporay patches to for the colorspace package to test pdfresource management ... UF}
% colorspace can define more models, that l3color can't yet handle.
diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx
index c03d57a7fc..03b931f11d 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx
@@ -82,7 +82,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -615,7 +615,15 @@
% the link type, so the link is for example no longer colored. It also removes the
% implicit grouping of the content.
%
-%
+% \DescribeHypkey{nested-links}%
+%
+% Links are sometimes nested. E.g. if a section heading contains a reference
+% it can lead to nested links in the table of contents or if |\nameref| is used.
+% That is not forbidden and normally work as expected: If the link area overlap
+% normally the inner link is \enquote{on top} and chosen at a click.
+% But it is not always actually wanted, so with the |nested-links| (a boolean key)
+% it is possible to disable such nested links.
+%
% \section{Draftmode}
% pdftex and other engines knows a
% draftmode which can be set with |\pdfdraftmode=1|
@@ -797,7 +805,7 @@
%
%\section{Assorted key descriptions}\label{sec:keydesc}
%The following gives a few details to some keys that are perhaps not
-%completly described in the manual, or are a bit different in this driver.
+%completely described in the manual, or are a bit different in this driver.
%The list is alphabetic.
%
% \DescribeHypkey{bookmarkstype} This key takes as value the extension of a list
@@ -956,7 +964,7 @@
%<@@=hyp>
% \end{macrocode}
% \begin{macrocode}
-\ProvidesFile{hgeneric-testphase.def}[2023-11-17 v0.96c %
+\ProvidesFile{hgeneric-testphase.def}[2023-12-09 v0.96d %
generic Hyperref driver for the LaTeX PDF management testphase bundle]
\RequirePackage{etoolbox} %why?
@@ -1221,15 +1229,15 @@
\cs_set_protected:Npn \hypersetup #1
{
%\kvsetkeys{Hyp} {#1}
- \keys_set:nn { hyp / setup }{ #1 }
+ \keys_set:nn { hyp }{ #1 }
}
% TODO for now unknown keys should only give warnings.
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
unknown .code:n =
{
\msg_warning:nneee { hyp } { unknown-key }
- { hyp~/~setup }{ \l_keys_key_str } { #1 }
+ { hyp }{ \l_keys_key_str } { #1 }
}
}
% \end{macrocode}
@@ -1238,7 +1246,7 @@
% chapters and sections and with \cs{phantomsection}. The following key allows
% to force a specific name for the destination so that it can be used by bookmarks.
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
next-anchor .code:n =
{
@@ -1274,7 +1282,7 @@
,destination .tl_set:N = \l_@@_href_pdf_destination_tl
,pdfremotestartview .code:n =
{
- \keys_set:nn { hyp / setup }
+ \keys_set:nn { hyp }
{ pdfremotestartview = #1 }
}
,page .code:n =
@@ -1293,7 +1301,7 @@
{
\pdfdict_put:nnn{l_hyp/annot/A}{Next}{#1}
\tl_set:Nn \Hy@href@nextactionraw {/Next~#1}
- \keys_set:nn {hyp / setup }{ pdfnewwindow = true}
+ \keys_set:nn {hyp }{ pdfnewwindow = true}
}
}
,afrelationship .code:n =
@@ -1304,7 +1312,7 @@
}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,href / urlencode .bool_set:N = \l_@@_href_url_encode_bool
,href / urlencode .default:n = {true}
@@ -1467,7 +1475,7 @@
\hook_new:n{hyp/link/cite}
%\color_set:nnn {hyp/color/cite}{HTML}{2E7E2A}
%\color_set:nn {hyp/color/citeborder}{hyp/color/cite!60!white}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,citecolor .code:n = {\@@_color_set:ne {hyp/color/cite}{#1}\@@_citecolor_hook_init:}
,citebordercolor
@@ -1477,7 +1485,7 @@
{
\hook_gput_code:nnn { hyp/link/cite }{hyp/cite}
{
- \keys_set:nn { hyp / setup }
+ \keys_set:nn { hyp }
{
linkcolor = hyp/color/cite
}
@@ -1488,7 +1496,7 @@
{
\hook_gput_code:nnn { hyp/link/cite }{hyp/citeborder}
{
- \keys_set:nn { hyp / setup }
+ \keys_set:nn { hyp }
{
linkbordercolor = hyp/color/citeborder
}
@@ -1972,7 +1980,7 @@
}
% \end{macrocode}
% \end{macro}
-% \section {Core Hyperref Commands}
+% \section{Core Hyperref Commands}
% Every \pkg{hyperref} has to define eight core command:
% \begin{verbatim}
% \hyper@anchor
@@ -1987,7 +1995,46 @@
%
% This driver defines for consistency also
% |\hyper@linklaunch| for Launch and |\hyper@linknamed| for Named.
+%
+% \subsection{Link level}
+% Links can be nested. Inner links need perhaps special handling, e.g.
+% to deactivate the link, or to change the border, or in the case of
+% tagging to add some additional structure to handle the parent-child rules.
+% We therefore add a global counter which is increased at the begin of
+% link and decreased at the end.
+% \begin{macro}{g_@@_linknestlevel_int}
+% \begin{macrocode}
+\int_new:N \g_@@_linknestlevel_int
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\prg_new_conditional:Npnn \@@_if_outer_link: {TF}
+ {
+ \int_compare:nNnTF { \g_@@_linknestlevel_int } > {1}
+ { \prg_return_false: }
+ { \prg_return_true: }
+ }
+% \end{macrocode}
+
+% \begin{macrocode}
+\cs_new:Npn \@@_check_link_nesting:TF #1 #2
+ {
+ \use_i:nn {#1}{#2}
+ }
+% \end{macrocode}
%
+% \begin{macrocode}
+\keys_define:nn { hyp }
+ {
+ nested-links .choice:,
+ nested-links / true .code:n =
+ { \cs_set_eq:NN \@@_check_link_nesting:TF \use_i:nn },
+ nested-links / false .code:n =
+ { \cs_set_eq:NN \@@_check_link_nesting:TF \@@_if_outer_link:TF },
+ nested-links .default:n = {true}
+ }
+% \end{macrocode}
% \subsection{ Anchors / destinations}
% The first three commands are needed for \enquote{anchors}. At first
% the internal commands to create a destination. It uses
@@ -2157,27 +2204,41 @@
{
\bool_if:NTF \l_@@_annot_GoTo_bool
{
- \Hy@VerboseLinkStart{#1}{#2}
- \group_begin:
- \tl_set:Nn \l_hyp_current_dest_name_tl {#2}
- \hook_use:n {hyp/link/#1}
- \@@_link_goto_begin:nw {#2}#3\Hy@xspace@end
- \@@_link_goto_end:
- \group_end:
- \Hy@VerboseLinkStop
+ \int_gincr:N\g_@@_linknestlevel_int
+ \@@_check_link_nesting:TF
+ {
+ \Hy@VerboseLinkStart{#1}{#2}
+ \group_begin:
+ \tl_set:Nn \l_hyp_current_dest_name_tl {#2}
+ \hook_use:n {hyp/link/#1}
+ \@@_link_goto_begin:nw {#2}#3\Hy@xspace@end
+ \@@_link_goto_end:
+ \group_end:
+ \Hy@VerboseLinkStop
+ }
+ {
+ \group_begin: #3\group_end:
+ }
+ \int_gdecr:N\g_@@_linknestlevel_int
}
{{\let\protect\relax#3}}
}
-
\cs_new_protected:Npn \hyper@linkstart #1 #2 %#1 context, #2=destination name
{
\bool_if:NT \l_@@_annot_GoTo_bool
{
- \Hy@VerboseLinkStart{#1}{#2}% only for debug
- \group_begin:
- \tl_set:Nn \l_hyp_current_dest_name_tl {#2}
- \hook_use:n {hyp/link/#1}
- \@@_link_goto_begin:nw {#2}
+ \int_gincr:N\g_@@_linknestlevel_int
+ \@@_check_link_nesting:TF
+ {
+ \Hy@VerboseLinkStart{#1}{#2}% only for debug
+ \group_begin:
+ \tl_set:Nn \l_hyp_current_dest_name_tl {#2}
+ \hook_use:n {hyp/link/#1}
+ \@@_link_goto_begin:nw {#2}
+ }
+ {
+ \group_begin:
+ }
}
}
@@ -2185,9 +2246,16 @@
{
\bool_if:NT \l_@@_annot_GoTo_bool
{
- \@@_link_goto_end:
- \group_end:
- \Hy@VerboseLinkStop
+ \@@_check_link_nesting:TF
+ {
+ \@@_link_goto_end:
+ \group_end:
+ \Hy@VerboseLinkStop
+ }
+ {
+ \group_end:
+ }
+ \int_gdecr:N\g_@@_linknestlevel_int
}
}
% \end{macrocode}
@@ -2203,31 +2271,39 @@
{
\bool_if:NTF \l_@@_annot_URI_bool
{
- \group_begin:
- \@@_text_pdfstring:eoN
- { #2}
- { \l_@@_text_enc_uri_print_tl }
- \l_@@_uri_tmpa_tl
- \pdfdict_put:nno{l_hyp/annot/A/URI}{URI}{\l_@@_uri_tmpa_tl}
- \bool_if:NT \l_@@_href_url_ismap_bool
- {
- \pdfdict_put:nnn{l_hyp/annot/A/URI}{IsMap}{true}
- }
- \cs_set_eq:NN \# \c_hash_str
- \cs_set_eq:NN \% \c_percent_str
- \Hy@safe@activestrue
- \mode_leave_vertical:
- \pdfannot_dict_put:nne {link/URI}{A}{<<\pdfdict_use:n {l_hyp/annot/A/URI}>>}
- \pdfannot_link:nen { URI }
- {
- }
+ \int_gincr:N\g_@@_linknestlevel_int
+ \@@_check_link_nesting:TF
+ {
+ \group_begin:
+ \@@_text_pdfstring:eoN
+ { #2}
+ { \l_@@_text_enc_uri_print_tl }
+ \l_@@_uri_tmpa_tl
+ \pdfdict_put:nno{l_hyp/annot/A/URI}{URI}{\l_@@_uri_tmpa_tl}
+ \bool_if:NT \l_@@_href_url_ismap_bool
+ {
+ \pdfdict_put:nnn{l_hyp/annot/A/URI}{IsMap}{true}
+ }
+ \cs_set_eq:NN \# \c_hash_str
+ \cs_set_eq:NN \% \c_percent_str
+ \Hy@safe@activestrue
+ \mode_leave_vertical:
+ \pdfannot_dict_put:nne {link/URI}{A}{<<\pdfdict_use:n {l_hyp/annot/A/URI}>>}
+ \pdfannot_link:nen { URI }
+ {
+ }
+ {
+ \let\protect\relax
+ #1
+ \Hy@xspace@end
+ \Hy@VerboseLinkStop %where is the start??
+ }
+ \group_end:
+ }
{
- \let\protect\relax
- #1
- \Hy@xspace@end
- \Hy@VerboseLinkStop %where is the start??
+ \group_begin: #1 \group_end:
}
- \group_end:
+ \int_gdecr:N\g_@@_linknestlevel_int
}
{{\let\protect\relax#1}}
}
@@ -2244,57 +2320,65 @@
{
\bool_if:NTF \l_@@_annot_GoToR_bool
{
- \group_begin:
- \tl_set:Ne \l_@@_filename_tmpa_tl { \text_expand:n { #2 } }
- \exp_args:Ne
- \pdf_object_if_exist:nF { @@_file_\tl_to_str:N \l_@@_filename_tmpa_tl }
- {
- \pdfdict_put:nne { l_pdffile/Filespec}{Subtype}{\pdf_name_from_unicode_e:n {application/pdf}}
- \pdffile_embed_file:noe
- {}
- {\l_@@_filename_tmpa_tl }
- {@@_file_\tl_to_str:N \l_@@_filename_tmpa_tl }
- }
- \pdfdict_put:nne
- {l_hyp/annot/A/GoToR}
- {F}
- {\pdf_object_ref:e {@@_file_\tl_to_str:N \l_@@_filename_tmpa_tl}}
- \@@_text_pdfstring:nnN
- { #3 }
- { \l_@@_text_enc_dest_print_tl }
- \l_@@_dest_name_tmpa_tl
- \tl_if_blank:eTF {#3}
+ \int_gincr:N\g_@@_linknestlevel_int
+ \@@_check_link_nesting:TF
{
- \pdfdict_put:nne {l_hyp/annot/A/GoToR}{D}
+ \group_begin:
+ \tl_set:Ne \l_@@_filename_tmpa_tl { \text_expand:n { #2 } }
+ \exp_args:Ne
+ \pdf_object_if_exist:nF { @@_file_\tl_to_str:N \l_@@_filename_tmpa_tl }
+ {
+ \pdfdict_put:nne { l_pdffile/Filespec}{Subtype}{\pdf_name_from_unicode_e:n {application/pdf}}
+ \pdffile_embed_file:noe
+ {}
+ {\l_@@_filename_tmpa_tl }
+ {@@_file_\tl_to_str:N \l_@@_filename_tmpa_tl }
+ }
+ \pdfdict_put:nne
+ {l_hyp/annot/A/GoToR}
+ {F}
+ {\pdf_object_ref:e {@@_file_\tl_to_str:N \l_@@_filename_tmpa_tl}}
+ \@@_text_pdfstring:nnN
+ { #3 }
+ { \l_@@_text_enc_dest_print_tl }
+ \l_@@_dest_name_tmpa_tl
+ \tl_if_blank:eTF {#3}
{
- [
- \int_eval:n
- { \int_max:nn {0}{ 0\l_@@_href_pdf_page_tl - 1 }}
- /\l_@@_dest_pdfremotestartview_tl
- ]
+ \pdfdict_put:nne {l_hyp/annot/A/GoToR}{D}
+ {
+ [
+ \int_eval:n
+ { \int_max:nn {0}{ 0\l_@@_href_pdf_page_tl - 1 }}
+ /\l_@@_dest_pdfremotestartview_tl
+ ]
+ }
}
- }
- {
- \pdfdict_put:nno {l_hyp/annot/A/GoToR}{D}{\l_@@_dest_name_tmpa_tl}
- }
- \mode_leave_vertical:
+ {
+ \pdfdict_put:nno {l_hyp/annot/A/GoToR}{D}{\l_@@_dest_name_tmpa_tl}
+ }
+ \mode_leave_vertical:
% \end{macrocode}
% We use an extra object here, as ghostscript doesn't like the
% object reference in the dict
% \url{https://chat.stackexchange.com/transcript/message/57361080#57361080}
% \begin{macrocode}
- \pdf_object_unnamed_write:ne{dict}{\pdfdict_use:n {l_hyp/annot/A/GoToR}}
- \pdfannot_dict_put:nne {link/GoToR}{A}{\pdf_object_ref_last:}
- \pdfannot_link:nnn %expansion??
- { GoToR }
- {
- }
+ \pdf_object_unnamed_write:ne{dict}{\pdfdict_use:n {l_hyp/annot/A/GoToR}}
+ \pdfannot_dict_put:nne {link/GoToR}{A}{\pdf_object_ref_last:}
+ \pdfannot_link:nnn %expansion??
+ { GoToR }
+ {
+ }
+ {
+ \let\protect\relax
+ #1\Hy@xspace@end
+ \Hy@VerboseLinkStop %where is the start??
+ }
+ \group_end:
+ }
{
- \let\protect\relax
- #1\Hy@xspace@end
- \Hy@VerboseLinkStop %where is the start??
+ \group_begin: #1 \group_end:
}
- \group_end:
+ \int_gdecr:N\g_@@_linknestlevel_int
}
{{\let\protect\relax#1}}
}
@@ -2312,47 +2396,53 @@
{
\bool_if:NTF \l_@@_annot_Launch_bool
{
- \group_begin:
- \@@_text_pdfstring:nnN
- { #1 }
- { \l_@@_text_enc_file_print_tl }
- \l_@@_filename_tmpa_tl
- \pdfdict_put:nno {l_hyp/annot/A/Launch}{F}{\l_@@_filename_tmpa_tl}
- \@@_text_pdfstring:noN
- { #3 }
- { \l_@@_text_enc_para_print_tl }
- \l_@@_para_tmpa_tl
- \bool_if:nTF
- {
- \str_if_eq_p:Vn \l_@@_para_tmpa_tl {()}
- ||
- \pdf_version_compare_p:Nn > {1.9}
- }
- {
- \pdfdict_remove:nn {l_hyp/annot/A/Launch}{Win}
- }
- {
- \pdfdict_put:nne
- {l_hyp/annot/A/Launch}
- {Win}
- {<</P \l_@@_para_tmpa_tl /F \l_@@_filename_tmpa_tl >>}
- }
- \mode_leave_vertical:
- \pdfannot_dict_put:nne {link/Launch}{A}{<<\pdfdict_use:n {l_hyp/annot/A/Launch}>>}
- \pdfannot_link:nen
- { Launch }
- {
- % /A
-% <<
-% \pdfdict_use:n {l_hyp/annot/A/Launch}
-% >>
- }
- {
- \let\protect\relax
- #2\Hy@xspace@end
- \Hy@VerboseLinkStop %where is the start??
- }
- \group_end:
+ \int_gincr:N\g_@@_linknestlevel_int
+ \@@_check_link_nesting:TF
+ {
+ \group_begin:
+ \@@_text_pdfstring:nnN
+ { #1 }
+ { \l_@@_text_enc_file_print_tl }
+ \l_@@_filename_tmpa_tl
+ \pdfdict_put:nno {l_hyp/annot/A/Launch}{F}{\l_@@_filename_tmpa_tl}
+ \@@_text_pdfstring:noN
+ { #3 }
+ { \l_@@_text_enc_para_print_tl }
+ \l_@@_para_tmpa_tl
+ \bool_if:nTF
+ {
+ \str_if_eq_p:Vn \l_@@_para_tmpa_tl {()}
+ ||
+ \pdf_version_compare_p:Nn > {1.9}
+ }
+ {
+ \pdfdict_remove:nn {l_hyp/annot/A/Launch}{Win}
+ }
+ {
+ \pdfdict_put:nne
+ {l_hyp/annot/A/Launch}
+ {Win}
+ {<</P \l_@@_para_tmpa_tl /F \l_@@_filename_tmpa_tl >>}
+ }
+ \mode_leave_vertical:
+ \pdfannot_dict_put:nne {link/Launch}{A}{<<\pdfdict_use:n {l_hyp/annot/A/Launch}>>}
+ \pdfannot_link:nen
+ { Launch }
+ {
+ % /A
+ % <<
+ % \pdfdict_use:n {l_hyp/annot/A/Launch}
+ % >>
+ }
+ {
+ \let\protect\relax
+ #2\Hy@xspace@end
+ \Hy@VerboseLinkStop %where is the start??
+ }
+ \group_end:
+ }
+ { \group_begin: #2 \group_end: }
+ \int_gdecr:N\g_@@_linknestlevel_int
}
{{\let\protect\relax#2}}
}
@@ -2380,31 +2470,37 @@
{
\bool_if:NTF \l_@@_annot_Named_bool
{
- \group_begin:
- \pdfmeta_standard_verify:nnTF {named_actions}{#1}
- {
- \mode_leave_vertical:
- \pdfdict_put:nne {l_hyp/annot/A/Named}{N}
- {\pdf_name_from_unicode_e:n{#1}}
- \pdfannot_dict_put:nne {link/Named}{A}{<<\pdfdict_use:n {l_hyp/annot/A/Named}>>}
- \pdfannot_link:nnn { Named }
+ \int_gincr:N\g_@@_linknestlevel_int
+ \@@_check_link_nesting:TF
+ {
+ \group_begin:
+ \pdfmeta_standard_verify:nnTF {named_actions}{#1}
{
-% /A
-% <<
-% \pdfdict_use:n { l_hyp/annot/A/Named }
-% >>
+ \mode_leave_vertical:
+ \pdfdict_put:nne {l_hyp/annot/A/Named}{N}
+ {\pdf_name_from_unicode_e:n{#1}}
+ \pdfannot_dict_put:nne {link/Named}{A}{<<\pdfdict_use:n {l_hyp/annot/A/Named}>>}
+ \pdfannot_link:nnn { Named }
+ {
+ % /A
+ % <<
+ % \pdfdict_use:n { l_hyp/annot/A/Named }
+ % >>
+ }
+ {
+ #2
+ \Hy@xspace@end
+ \Hy@VerboseLinkStop
+ }
}
{
+ \msg_warning:nnn { hyp } { pdfa-no-named-action }{#1}
#2
- \Hy@xspace@end
- \Hy@VerboseLinkStop
}
- }
- {
- \msg_warning:nnn { hyp } { pdfa-no-named-action }{#1}
- #2
- }
- \group_end:
+ \group_end:
+ }
+ { \group_begin: #2 \group_end: }
+ \int_gdecr:N\g_@@_linknestlevel_int
}
{{\let\protect\relax#2}}
}
@@ -2517,7 +2613,7 @@
% \begin{hypkey}{colorlinks}
% This key also resets the border and borderstyle.
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,colorlinks .meta:n =
{
@@ -2539,14 +2635,14 @@
% \begin{macrocode}
\seq_map_inline:Nn \c_@@_annot_types_seq
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
,color#1 .bool_set:c = { l_hyp_annot_color#1_bool }
,#1color .code:n = { \@@_color_set:ne {hyp/color/#1}{##1} }
}
}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,allcolors .meta:n =
{
@@ -2568,7 +2664,7 @@
% or cmyk (unusual). This can be set with the |bordercolormodel| key:
%\begin{hypkey}{bordercolormodel}
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,bordercolormodel .choices:nn =
{rgb,cmyk}
@@ -2580,7 +2676,7 @@
% \begin{macrocode}
\prop_map_inline:Nn \c_@@_map_hyp_annot_prop
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
#1bordercolor .code:n =
{
@@ -2605,7 +2701,7 @@
}
}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,allbordercolors .meta:n =
{
@@ -2625,7 +2721,7 @@
% \begin{macrocode}
\prop_map_inline:Nn \c_@@_map_hyp_annot_prop
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
#1border .code:n =
{
@@ -2644,7 +2740,7 @@
}
}
}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,pdfborder .code:n =
{
@@ -2678,7 +2774,7 @@
% \begin{macrocode}
\prop_map_inline:Nn \c_@@_map_hyp_annot_prop
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
#1borderstyle .code:n =
{
@@ -2697,7 +2793,7 @@
}
}
}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,pdfborderstyle .code:n =
{
@@ -2850,7 +2946,7 @@
{ \pdf_version_compare_p:Nn > {1.4} }
{ \str_if_eq_p:ee{\pdf_version_major:}{-1} }
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
,_ocgcolorlinks .meta:n =
{
@@ -2864,7 +2960,7 @@
}
}
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
,_ocgcolorlinks .code:n =
{
@@ -2876,7 +2972,7 @@
}
}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,ocgcolorlinks .choice:
,ocgcolorlinks / true .meta:n =
@@ -2899,13 +2995,13 @@
{ \pdf_version_compare_p:Nn > {1.4} }
{ \str_if_eq_p:ee{\pdf_version_major:}{-1} }
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
,ocgcolor#1 .bool_set:c = { l_hyp_annot_ocgcolor#1_bool }
}
}
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
,ocgcolor#1 .code:n=
{
@@ -2925,7 +3021,7 @@
% \begin{macrocode}
\prop_map_inline:Nn \c_@@_map_hyp_annot_prop
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
,#1highlight .choices:nn =
{ /I, /N, /O, /P}
@@ -2954,7 +3050,7 @@
}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,pdfhighlight .choices:nn =
{ /I, /N, /O, /P}
@@ -2991,7 +3087,7 @@
% This key disable all appearance keys. The link themselves are still there.
% \begin{hypkey}{hidelinks,hidelink,hideurl,hidefile,hiderun,hidemenu}
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
hidelinks .meta:n =
{
@@ -3004,7 +3100,7 @@
\seq_map_inline:Nn \c_@@_annot_types_seq
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
hide#1 .meta:n =
{
@@ -3021,20 +3117,20 @@
% This define the key for the color schemes and sets the default colors.
% \begin{hypkey}{colorscheme}
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
colorscheme .code:n =
{
\prop_map_inline:cn { c_@@_colorscheme_#1_prop }
{
- \keys_set:nn { hyp /setup }
+ \keys_set:nn { hyp }
{
##1 = ##2
}
}
}
}
-\keys_set:nn { hyp / setup } {colorscheme=phelype}
+\keys_set:nn { hyp } {colorscheme=phelype}
% \end{macrocode}
% \end{hypkey}
%
@@ -3044,7 +3140,7 @@
% The following are ignored (with or without warnings)
% \begin{hypkey}{unicode,pdfencoding,pdfversion}
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,unicode .code:n = {}
,pdfencoding .code:n = {}
@@ -3062,12 +3158,12 @@
%
% \begin{hypkey}{verbose,debug,draft,final}
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,verbose .legacy_if_set:n = {Hy@verbose}
,debug .legacy_if_set:n = {Hy@verbose}
}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,draft .code:n =
{
@@ -3086,7 +3182,7 @@
% pageanchor,linktoc,linktocpage,plainpages,localanchorname,
% linkfileprefix}
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,extension .tl_set:N = \XR@ext
,extension .initial:n= pdf
@@ -3098,7 +3194,7 @@
,plainpages .legacy_if_set:n = {Hy@plainpages}
}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,linktoc .choices:nn = { none, section, all, page }
{
@@ -3124,7 +3220,7 @@
% \begin{macrocode}
\prop_map_inline:Nn \c_@@_map_hyp_annot_prop
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
,#1 .bool_set:c = {l_@@_annot_#2_bool}
}
@@ -3133,7 +3229,7 @@
% \end{hypkey}
%
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,baseurl .code:n =
{
@@ -3691,7 +3787,7 @@
% \begin{hypkey}{pdfview}
% Destination keys. pdfview is a bit more complicated so extra.
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,pdfview .code:n =
{
@@ -3781,7 +3877,7 @@
% \begin{hypkey}{pdflang}
% |pdflang| should be deprecated.
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,pdflang .code:n =
{
@@ -3807,7 +3903,7 @@
\regex_set:Nn\l_@@_optlang_regex {\A\[([A-Za-z\-]+)\](.*)}
\cs_new_protected:Npn \@@_setup_info_key:nn #1 #2
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
pdf#1 .code:n =
{
@@ -3894,7 +3990,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_setup_info_date_key:nn #1 #2
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
pdf#1 .code:n =
{
@@ -3927,7 +4023,7 @@
\@@_setup_info_date_key:nn {creationdate} {CreationDate}
\@@_setup_info_date_key:nn {moddate} {ModDate}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
pdfmetadate .code:n = { \@@_store_metadata:nn {pdfmetadate}{#1} }
}
@@ -3936,12 +4032,12 @@
% \begin{hypkey}{pdftrapped}
% Trapped is a bit curious, it has an value "unknown", and one can't suppress it ...
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,pdftrapped .code:n =
{
\exp_args:Nne
- \keys_set:nn { hyp / setup } { _pdftrapped = \str_uppercase:n { #1 } }
+ \keys_set:nn { hyp } { _pdftrapped = \str_uppercase:n { #1 } }
}
,_pdftrapped .choices:nn = {TRUE,FALSE,UNKNOWN}
{
@@ -3969,7 +4065,7 @@
% \begin{hypkey}{pdfinfo}
% pdfinfo allows to set the info keys with keyval ...
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
pdfinfo .code:n =
{
@@ -3980,10 +4076,10 @@
% \end{hypkey}
% Now we set some default values
% \begin{macrocode}
-\keys_set:nn { hyp / setup} {pdfcreator = LaTeX~with~hyperref}
-\keys_set:nn { hyp / setup} {pdfauthor = }
-\keys_set:nn { hyp / setup} {pdftitle = }
-\keys_set:nn { hyp / setup} {pdfsubject = }
+\keys_set:nn { hyp} {pdfcreator = LaTeX~with~hyperref}
+\keys_set:nn { hyp} {pdfauthor = }
+\keys_set:nn { hyp} {pdftitle = }
+\keys_set:nn { hyp} {pdfsubject = }
% \end{macrocode}
%
% \subsection{hyperxmp keys}
@@ -4032,7 +4128,7 @@
,pdfdate
}
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
#1 .code:n= { \@@_store_metadata:nn {#1}{##1}}
}
@@ -4043,7 +4139,7 @@
% \subsection{Transitions}
% pdfpageduration sets the duration a page is shown in full screen mode.
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
pdfpageduration .code:n =
{
@@ -4088,7 +4184,7 @@
% opaque & true or false, only relevant for Fly style
% \end{tabular}
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
pdfpagetransition .code:n =
{
@@ -4180,7 +4276,7 @@
%
% Finally we process the package option list, to get most keys working
% \begin{macrocode}
-\keys_set_known:nv{hyp/setup}{opt@hyperref.sty}
+\keys_set_known:nv{ hyp }{opt@hyperref.sty}
% \end{macrocode}
%
% Unfinished
diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf
index 9318d060f9..f5d853b7e4 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx
index 37e47d5c91..03e50367f2 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx
@@ -45,7 +45,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
%
@@ -56,27 +56,27 @@
% \begin{macrocode}
%<drivers>\ProvidesExplFile
%<*dvipdfmx>
- {l3backend-testphase-dvipdfmx.def}{2023-11-17}{}
+ {l3backend-testphase-dvipdfmx.def}{2023-12-09}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: dvipdfmx}
%</dvipdfmx>
%<*dvips>
- {l3backend-testphase-dvips.def}{2023-11-17}{}
+ {l3backend-testphase-dvips.def}{2023-12-09}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: dvips}
%</dvips>
%<*dvisvgm>
- {l3backend-testphase-dvisvgm.def}{2023-11-17}{}
+ {l3backend-testphase-dvisvgm.def}{2023-12-09}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: dvisvgm}
%</dvisvgm>
%<*luatex>
- {l3backend-testphase-luatex.def}{2023-11-17}{}
+ {l3backend-testphase-luatex.def}{2023-12-09}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (LuaTeX)}
%</luatex>
%<*pdftex>
- {l3backend-testphase-pdftex.def}{2023-11-17}{}
+ {l3backend-testphase-pdftex.def}{2023-12-09}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (pdfTeX)}
%</pdftex>
%<*xdvipdfmx>
- {l3backend-testphase-xetex.def}{2023-11-17}{}
+ {l3backend-testphase-xetex.def}{2023-12-09}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: XeTeX}
%</xdvipdfmx>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf
index 3c292b8dfa..da62220855 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx
index 4c0942ad72..dfb1f12e75 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx
@@ -48,7 +48,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -432,7 +432,7 @@
% \begin{macrocode}
%<@@=pdfannot>
%<*header>
-\ProvidesExplPackage{l3pdfannot}{2023-11-17}{0.96c}
+\ProvidesExplPackage{l3pdfannot}{2023-12-09}{0.96d}
{PDF-annotations}
\RequirePackage{l3pdfdict}
%</header>
@@ -441,7 +441,8 @@
% bitset for it.
% \begin{macrocode}
%<*package>
-\RequirePackage{l3bitset}
+\cs_if_exist:NF \bitset_new:Nn
+ { \RequirePackage { l3bitset } }
\bitset_new:Nn \l_pdfannot_F_bitset
{
Invisible = 1,
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf
index 8db999acd8..a3b40dbcd2 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx
index abb1d33936..d1007322fa 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -208,7 +208,7 @@
% \begin{macrocode}
%<@@=pdfdict>
%<*header>
-\ProvidesExplPackage{l3pdfdict}{2023-11-17}{0.96c}
+\ProvidesExplPackage{l3pdfdict}{2023-12-09}{0.96d}
{Tools for PDF dictionaries (LaTeX PDF management testphase bundle)}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf
index c488bc77bf..ae30760b1b 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx
index b4d535bfc2..ef7f1a5c4c 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf
index 1ad47b14fb..1d2dfa5a9a 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx
index dfbf0c3af3..6e6f5fe007 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx
@@ -64,7 +64,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf
index e0f6b1fc9a..5daeeaf118 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx
index c94891b733..ae2cdec29d 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf
index 80cb55d643..1ab858899c 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
index fb7b913a76..cf0153732e 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
@@ -55,7 +55,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
index c9b9cd1aef..b455ede38e 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
index e951990650..2f9ce890c5 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
@@ -83,7 +83,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
index b66ff7f3cb..bfe906ca9d 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx
index 7922c659a7..15fe26a805 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf
index 3d40a66eee..428b07121c 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx
index 59275311f4..28ce09312c 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx
@@ -69,7 +69,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -972,7 +972,7 @@
%<*package>
%<@@=pdffield>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesExplPackage{l3pdffield-testphase}{2023-11-17}{0.96c}%
+\ProvidesExplPackage{l3pdffield-testphase}{2023-12-09}{0.96d}%
{form fields}
% \end{macrocode}
% \subsection{hyperref specific command}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf
index e4171c07e0..8a91d85118 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx
index 5a11d41e7e..01d247b7e7 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -398,7 +398,7 @@
%
% \begin{macrocode}
%<*header>
-\ProvidesExplPackage{l3pdffile}{2023-11-17}{0.96c}
+\ProvidesExplPackage{l3pdffile}{2023-12-09}{0.96d}
{embedding and referencing files in PDF---LaTeX PDF management testphase bundle}
\RequirePackage{l3pdftools} %temporarly!!
%</header>
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf
index cc338aff79..35940f20fd 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx
index 88704f2e51..2a7ce89481 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx
@@ -57,7 +57,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -632,7 +632,7 @@
%<@@=pdfmanagement>
%<*header>
%
-\ProvidesExplPackage{l3pdfmanagement}{2023-11-17}{0.96c}
+\ProvidesExplPackage{l3pdfmanagement}{2023-12-09}{0.96d}
{Management of core PDF dictionaries (LaTeX PDF management testphase bundle)}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf
index 9ddc2d15a7..4e704567e9 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx
index 6d6b19b2de..720669e237 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -458,6 +458,33 @@
% It is up to the author to ensure and validate
% that the document actually follows the standard.
%
+% \subsubsection{Declarations}
+% PDF knows beside standards also a more generic method to declare conformance
+% to some specification by adding a declaration,
+% see \url{https://pdfa.org/wp-content/uploads/2019/09/PDF-Declarations.pdf}).
+% Such declarations can be added as a simple url which identify the specification or
+% with additional details regarding date and credentials. An example would be
+%
+% \begin{verbatim}
+% \DocumentMetadata{}
+% \documentclass{article}
+% \ExplSyntaxOn
+% \pdfmeta_xmp_add_declaration:e {https://pdfa.org/declarations\c_hash_str iso32005}
+% \pdfmeta_xmp_add_declaration:ennnn
+% {https://pdfa.org/declarations\c_hash_str wcag21A}{}{2023-11-20}{}{}
+% \pdfmeta_xmp_add_declaration:nnnnn
+% {https://github.com/TikZlings/no-duck-harmed}
+% {Ulrike~Fischer}{2023-11-20}{Bär}{https://github.com/u-fischer/bearwear}
+% \pdfmeta_xmp_add_declaration:nnnnn
+% {https://github.com/TikZlings/no-duck-harmed}
+% {Ulrike~Fischer}{2023-11-20}{Paulo}{https://github.com/cereda/sillypage}
+% \ExplSyntaxOff
+% \begin{document}
+% text
+% \end{document}
+%
+% \end{verbatim}
+%
% \subsubsection{Dates}
% \begin{itemize}
% \item
@@ -557,6 +584,31 @@
% With this command a xmlns name space can be added.
% \end{function}
%
+% With the two following commands PDF declarations can be added to the XMP metadata
+% (see \url{https://pdfa.org/wp-content/uploads/2019/09/PDF-Declarations.pdf}).
+% \begin{function}{\pdfmeta_xmp_add_declaration:n,\pdfmeta_xmp_add_declaration:e}
+% \begin{syntax}
+% \cs{pdfmeta_xmp_add_declaration:n}\Arg{uri}
+% \end{syntax}
+% This add a PDF declaration with the required |conformsTo| property to the XMP metadata.
+% \meta{uri} should not be empty and is a URI specifying
+% the standard or profile referred to by the PDF
+% Declaration. If the uri contains a hash, use \cs{c_hash_str} to excape it
+% and use the \texttt{e} variant to expand it.
+% \end{function}
+%
+% \begin{function}{\pdfmeta_xmp_add_declaration:nnnnn,\pdfmeta_xmp_add_declaration:ennnn}
+% \begin{syntax}
+% \cs{pdfmeta_xmp_add_declaration:nnnnn}\Arg{uri}\Arg{By}\Arg{Date}\Arg{Credentials}\Arg{Report}
+% \end{syntax}
+% This add a PDF declaration to the XMP metadata similar
+% to \cs{pdfmeta_xmp_add_declaration:n}.
+% With \meta{By}, \meta{Date}, \meta{Credentials}, \meta{Report} the optional
+% fields |claimBy| (text), |claimDate| (iso date), |claimCredentials| (text) and
+% |claimReport| (uri) of the |claimData| property can be given.
+% If \cs{pdfmeta_xmp_add_declaration:nnnnn} is used twice with the same \meta{uri}
+% argument the |claimData| are concatenated. There is no check if the |claimData| are identical.
+% \end{function}
% \end{documentation}
%
% \begin{implementation}
@@ -566,7 +618,7 @@
% \begin{macrocode}
%<@@=pdfmeta>
%<*header>
-\ProvidesExplPackage{l3pdfmeta}{2023-11-17}{0.96c}
+\ProvidesExplPackage{l3pdfmeta}{2023-12-09}{0.96d}
{PDF-Standards---LaTeX PDF management testphase bundle}
%</header>
% \end{macrocode}
@@ -1217,7 +1269,7 @@
{\AddToDocumentProperties [document]{pdfstandard-X}{PDF/X-6p}},
_pdfstandard / UA-1 .code:n =
{
- \AddToDocumentProperties [document]{pdfstandard-UA}{{1}{2016}}
+ \AddToDocumentProperties [document]{pdfstandard-UA}{{1}{}}
},
_pdfstandard / UA-2 .code:n =
{\AddToDocumentProperties [document]{pdfstandard-UA}{{2}{2023}}},
@@ -1735,6 +1787,7 @@
\@@_xmp_build_pdf:
\@@_xmp_build_xmpRights:
\@@_xmp_build_standards: %pdfaid,pdfxid,pdfuaid
+ \@@_xmp_build_pdfd:
\@@_xmp_build_dc:
\@@_xmp_build_photoshop:
\@@_xmp_build_xmp:
@@ -2129,6 +2182,84 @@
}
% \end{macrocode}
% \item[jav]: currently ignored
+%
+% \item[declarations] The PDF Declarations mechanism allows creation and
+% editing software to declare, via a PDF Declaration, a PDF file to be in
+% conformance with a 3rd party specification or profile
+% that may not be related to PDF technology. Their specification is for example
+% described in \url{https://pdfa.org/wp-content/uploads/2019/09/PDF-Declarations.pdf}.
+%
+% If declarations are added to the XMP-metadata they need (for pdf/A compliancy) a
+% schema declaration. We do not add it by default but define here a command to enable
+% it. (This can be done in the document preamble as xmp is built only at the end.)
+%
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_xmp_schema_enable_pdfd:
+ {
+ \@@_xmp_xmlns_new:ne {pdfd}{http://pdfa.org/declarations/}
+ \@@_xmp_schema_new:nnn
+ {PDF~Declarations~Schema}
+ {pdfd}
+ {http://pdfa.org/declarations/}
+ \@@_xmp_property_new:nnnnn
+ {pdfd}
+ {declarations}
+ {Bag~declaration}
+ {external}
+ {An~unordered~array~of~PDF~Declaration~entries,~where~each~PDF~Declaration~representing~a~statement~of~conformance~with~ an~identified~external~standard~or~profile,~along~with~optional~information~identifying~the~nature~of~the~claim.}
+% \end{macrocode}
+% the values are complicated so we use the additions: method to add them.
+% \begin{macrocode}
+ \cs_new_protected:cpn { __pdfmeta_xmp_schema_pdfd_additions: }
+ {
+ \@@_xmp_add_packet_open:nn{pdfaSchema}{valueType}
+ \@@_xmp_add_packet_open:nn{rdf}{Seq}
+ \@@_xmp_add_packet_open_attr:nnn{rdf}{li}{rdf:parseType="Resource"}
+ \@@_xmp_add_packet_line:nnn{pdfaType}{type}{claim}
+ \@@_xmp_add_packet_line:nnn{pdfaType}{namespaceURI}
+ {http://pdfa.org/declarations/}
+ \@@_xmp_add_packet_line:nnn{pdfaType}{prefix}{pdfd}
+ \@@_xmp_add_packet_line:nnn{pdfaType}{description}
+ {A~structure~describing~properties~of~an~individual claim.}
+ \@@_xmp_add_packet_open:nn{pdfaType}{field}
+ \@@_xmp_add_packet_open:nn{rdf}{Seq}
+ \@@_xmp_add_packet_field:nnn{claimReport}{Text}
+ {A~URL~to~a~report~containing~details~of~the~specific~conformance~claim.}
+ \@@_xmp_add_packet_field:nnn{claimCredentials}{Text}
+ {The~claimant's~credentials.}
+ \@@_xmp_add_packet_field:nnn{claimDate}{Text}
+ {A~date~identifying~when~the~claim~was~made.}
+ \@@_xmp_add_packet_field:nnn{claimBy}{Text}
+ {The~name~of~the~organization~and/or~individual~and/or~software~making~the~claim.}
+ \@@_xmp_add_packet_close:nn{rdf}{Seq}
+ \@@_xmp_add_packet_close:nn{pdfaType}{field}
+ \@@_xmp_add_packet_close:nn{rdf}{li}
+ \@@_xmp_add_packet_open_attr:nnn{rdf}{li}{rdf:parseType="Resource"}
+ \@@_xmp_add_packet_line:nnn{pdfaType}{type}{declaration}
+ \@@_xmp_add_packet_line:nnn{pdfaType}{namespaceURI}
+ {http://pdfa.org/declarations/}
+ \@@_xmp_add_packet_line:nnn{pdfaType}{prefix}{pdfd}
+ \@@_xmp_add_packet_line:nnn{pdfaType}{description}
+ {A~structure~describing~a~single~PDF~ Declaration~asserting~conformance~with~ an~externally-identified~standard~or~ profile.}
+ \@@_xmp_add_packet_open:nn{pdfaType}{field}
+ \@@_xmp_add_packet_open:nn{rdf}{Seq}
+ \@@_xmp_add_packet_field:nnn{conformsTo}{Text}
+ {A~property~containing~a~URI~specifying~the~standard~or~profile~by~the~PDF~Declaration.~This~property~is~ intended~to~mirror~the~Dublin~Core~property~dc:conformsTo.}
+ \@@_xmp_add_packet_field:nnn{claimData}{Bag~claim}
+ {An~unordered~array~of~claim~data,~where~each~claim~identifies~the~nature~of~the~claim.}
+ \@@_xmp_add_packet_close:nn{rdf}{Seq}
+ \@@_xmp_add_packet_close:nn{pdfaType}{field}
+ \@@_xmp_add_packet_close:nn{rdf}{li}
+ \@@_xmp_add_packet_close:nn{rdf}{Seq}
+ \@@_xmp_add_packet_close:nn{pdfaSchema}{valueType}
+ }
+% \end{macrocode}
+% the schema should be added only once so disable it after use:
+% \begin{macrocode}
+ \cs_gset_eq:NN \@@_xmp_schema_enable_pdfd: \prg_do_nothing:
+ }
+% \end{macrocode}
%
% \end{description}
% \subsection{The actual user / document data}
@@ -2241,8 +2372,56 @@
% \end{macrocode}
% \end{macro}
%
-
-% \subsubsection{Photoshop}
+% \subsection{Declarations}
+% See \url{https://pdfa.org/wp-content/uploads/2019/09/PDF-Declarations.pdf}
+%
+% \begin{variable}{\g_@@_xmp_pdfd_data_prop}
+% This holds the data for declarations.
+% \begin{macrocode}
+\prop_new:N \g_@@_xmp_pdfd_data_prop
+% \end{macrocode}
+% \end{variable}
+% the main building command used in the xmp generation
+% \begin{macro}{\@@_xmp_build_pdfd:}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_xmp_build_pdfd:
+ {
+ \prop_if_empty:NF\g_@@_xmp_pdfd_data_prop
+ {
+ \@@_xmp_add_packet_open:nn{pdfd}{declarations}
+ \@@_xmp_add_packet_open:nn{rdf}{Bag}
+ \prop_map_inline:Nn \g_@@_xmp_pdfd_data_prop
+ {
+ \@@_xmp_build_pdfd_claim:nn{##1}{##2}
+ }
+ \@@_xmp_add_packet_close:nn{rdf}{Bag}
+ \@@_xmp_add_packet_close:nn{pdfd}{declarations}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_xmp_build_pdfd_claim:nn}
+% This build the xml for one claim. If there is no
+% claimData only the conformsTo is output.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_xmp_build_pdfd_claim:nn #1#2
+ {
+ \@@_xmp_add_packet_open_attr:nnn{rdf}{li}{rdf:parseType="Resource"}
+ \@@_xmp_add_packet_line:nnn{pdfd}{conformsTo}{#1}
+ \tl_if_empty:nF {#2}
+ {
+ \@@_xmp_add_packet_open:nn{pdfd}{claimData}
+ \@@_xmp_add_packet_open:nn{rdf}{Bag}
+ #2
+ \@@_xmp_add_packet_close:nn{rdf}{Bag}
+ \@@_xmp_add_packet_close:nn{pdfd}{claimData}
+ }
+ \@@_xmp_add_packet_close:nn{rdf}{li}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Photoshop}
% \begin{macro}{\@@_xmp_build_photoshop:}
% \begin{macrocode}
\cs_new_protected:Npn \@@_xmp_build_photoshop:
@@ -2633,6 +2812,45 @@
}
% \end{macrocode}
% \end{macro}
+%
+% \begin{macro}{\pdfmeta_xmp_add_declaration:n,\pdfmeta_xmp_add_declaration:e}
+% \begin{macrocode}
+\cs_new_protected:Npn \pdfmeta_xmp_add_declaration:n #1 %conformsTo uri
+ {
+ \@@_xmp_schema_enable_pdfd:
+ \prop_gput:Nnn\g_@@_xmp_pdfd_data_prop{#1}{}
+ }
+\cs_generate_variant:Nn \pdfmeta_xmp_add_declaration:n {e}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pdfmeta_xmp_add_declaration:nnnnn,\pdfmeta_xmp_add_declaration:ennnn}
+% \begin{macrocode}
+\cs_new_protected:Npn \pdfmeta_xmp_add_declaration:nnnnn #1#2#3#4#5
+ %#1=conformsTo uri, #2 claimBy, #3 claimDate #4 claimCredentials #4 claimReport
+ {
+ \@@_xmp_schema_enable_pdfd:
+ \tl_set:Nn \l_@@_tmpa_tl
+ {
+ \@@_xmp_add_packet_open_attr:nnn{rdf}{li}{rdf:parseType="Resource"}
+ \@@_xmp_add_packet_line:nnn{pdfd}{claimBy}{#2}
+ \@@_xmp_add_packet_line:nnn{pdfd}{claimDate}{#3}
+ \@@_xmp_add_packet_line:nnn{pdfd}{claimCredentials}{#4}
+ \@@_xmp_add_packet_line:nnn{pdfd}{claimReport}{#5}
+ \@@_xmp_add_packet_close:nn{rdf}{li}
+ }
+ \prop_get:NnNT \g_@@_xmp_pdfd_data_prop {#1}\l_@@_tmpb_tl
+ {
+ \tl_concat:NNN \l_@@_tmpa_tl \l_@@_tmpa_tl \l_@@_tmpb_tl
+ }
+ \prop_gput:Nno\g_@@_xmp_pdfd_data_prop{#1}
+ {
+ \l_@@_tmpa_tl
+ }
+ }
+\cs_generate_variant:Nn\pdfmeta_xmp_add_declaration:nnnnn {e}
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macrocode}
%</package>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf
index ccbfc2789e..6f94039cd0 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx
index c6efc127f3..3e5dc1f1ff 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -231,7 +231,7 @@
%
% \begin{macrocode}
%<*header>
-\ProvidesExplPackage{l3pdftools}{2023-11-17}{0.96c}
+\ProvidesExplPackage{l3pdftools}{2023-12-09}{0.96d}
{candidate commands for l3pdf---LaTeX PDF management testphase bundle}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf
index 6711cd498c..e10591432e 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx
index 0f3196cb0a..3928d790d3 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx
@@ -48,7 +48,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -132,7 +132,7 @@
% \begin{macrocode}
%<@@=pdf>
%<*header>
-\ProvidesExplPackage{l3pdfxform}{2023-11-17}{0.96c}
+\ProvidesExplPackage{l3pdfxform}{2023-12-09}{0.96d}
{command to create xforms (beta)---LaTeX PDF management testphase bundle}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf
index b013fc980d..7b901ddda0 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx
index 332012c4dc..7688446417 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx
@@ -47,7 +47,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -220,7 +220,7 @@
% \begin{macrocode}
%<@@=pdfmanagement>
%<*header>
-\ProvidesExplPackage{ltdocinit}{2023-11-17}{0.96c}
+\ProvidesExplPackage{ltdocinit}{2023-12-09}{0.96d}
{Initialize document metadata}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf
index d8c5ab0934..32df59ad2e 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
index 6154ccf3e3..cdcc24255e 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
@@ -47,7 +47,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -63,7 +63,7 @@
% |debug={firstaidoff={name1,name2,...},...}|.
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{pdfmanagement-firstaid}{2023-11-17}{0.96c}
+\ProvidesExplPackage{pdfmanagement-firstaid}{2023-12-09}{0.96d}
{LaTeX PDF management testphase bundle / firstaid-patches}
%<@@=pdfmanagement>
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
index 5b95298b42..fc3bd4ce8a 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx
index a685374c52..189f496cf2 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx
@@ -47,7 +47,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -233,10 +233,7 @@
%
% \section{Requirements}
% The new PDF management is developed parallel to the \LaTeX{} format
-% and should be updated together with the format. It
-% requires currently a \LaTeX{} format from 2023/11/01 or later
-% and an L3 programming layer of 2023-11-01 or later.
-% It currently depends on the experimental package and \pkg{l3bitset}.
+% and should be updated together with the format.
% In some places, e.g. when writing strings to the pdf it assumes that
% the file is utf8 encoded -- ascii will naturally work too, but legacy 8bit encodings are
% not supported.
@@ -397,7 +394,7 @@
% \begin{macrocode}
%<@@=pdf>
%<*package>
-\ProvidesExplPackage{pdfmanagement-testphase}{2023-11-17}{0.96c}
+\ProvidesExplPackage{pdfmanagement-testphase}{2023-12-09}{0.96d}
{LaTeX PDF management testphase bundle}
\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
\IfFormatAtLeastTF{2020-10-01}{}{
@@ -425,7 +422,7 @@
% to allow to set it in the document.
% \begin{macrocode}
%<*header>
-\ProvidesExplFile{pdfmanagement-testphase.ltx}{2023-11-17}{0.96c}
+\ProvidesExplFile{pdfmanagement-testphase.ltx}{2023-12-09}{0.96d}
{PDF~management~code~(testphase)}
% \end{macrocode}
% We define a boolean for the new delayed shipout. This is temporary. At some
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf
index 041de89f5e..5f9f2f81e5 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
index 98d5aaf4e9..a444924dfd 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
+++ b/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
@@ -1,6 +1,6 @@
%% LaTeX2e file `xcolor-patches-tmp-ltx.sty'
%%
-\ProvidesPackage{xcolor-patches-tmp-ltx}[2023-11-17 v0.96c patch xcolor for l3color]
+\ProvidesPackage{xcolor-patches-tmp-ltx}[2023-12-09 v0.96d patch xcolor for l3color]
\@ifundefined{color_set:nn}{\RequirePackage{l3color}}{}
\ExplSyntaxOn