texlive[73181] Master/texmf-dist: pdfmanagement-testphase (21dec24)

commits+karl at tug.org commits+karl at tug.org
Sat Dec 21 21:55:20 CET 2024


Revision: 73181
          https://tug.org/svn/texlive?view=revision&revision=73181
Author:   karl
Date:     2024-12-21 21:55:20 +0100 (Sat, 21 Dec 2024)
Log Message:
-----------
pdfmanagement-testphase (21dec24)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/README.md
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/hyperref-generic.pdf
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3backend-testphase.pdf
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfannot.pdf
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfdict.pdf
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-action.pdf
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-checkbox.pdf
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-choice.pdf
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-textfield.pdf
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield.pdf
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffile.pdf
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfmanagement.pdf
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfmeta.pdf
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdftools.pdf
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfxform.pdf
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/ltdocinit.pdf
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
    trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-testphase.pdf
    trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/hyperref-generic.dtx
    trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3backend-testphase.dtx
    trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfannot.dtx
    trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfdict.dtx
    trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-action.dtx
    trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-checkbox.dtx
    trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-choice.dtx
    trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
    trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
    trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-textfield.dtx
    trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield.dtx
    trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffile.dtx
    trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfmanagement.dtx
    trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfmeta.dtx
    trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdftools.dtx
    trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfxform.dtx
    trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/ltdocinit.dtx
    trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
    trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/pdfmanagement-testphase.dtx
    trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/color-ltx.sty
    trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
    trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def
    trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvipdfmx.def
    trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvips.def
    trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvisvgm.def
    trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-luatex.def
    trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-pdftex.def
    trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-xetex.def
    trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3pdffield-testphase.sty
    trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-firstaid.sty
    trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx
    trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.sty
    trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty

Modified: trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/CHANGELOG.md	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/CHANGELOG.md	2024-12-21 20:55:20 UTC (rev 73181)
@@ -5,7 +5,22 @@
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 this project uses date-based 'snapshot' version identifiers.
 
+## [2024-12-20]
+Version: 2024-12-20 v0.96o
+
+### Changed 
+ - hyp/link/GoTo/Contents and hyp/link/URI/Contents now fill also the dictionary entry. 
+   This allows to replace it fully.
+ - hyp/link/GoTo/Contents socket has been added to \hyper at linkstart too.  
+ - content and name of dummy PDF/A-4F attachment.
+ - added testphase=latest key
+
+### Added 
+ - l3pdfmeta: standard verification tests for embedded test, A-4 will switch to A-4F is embedded files are detected
+ - l3pdffile: counts embedded files for verification tests.
+ 
 ## [2024-10-27]
+Version: 2024-10-27 v0.96n
 
 ### Changed
  - \pdf_bdc:nn now creates by default inline dictionaries if the engine support this.

Modified: trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/README.md	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/README.md	2024-12-21 20:55:20 UTC (rev 73181)
@@ -1,6 +1,6 @@
 # LaTeX PDF management testphase bundle
 
-Version: 0.96n, 2024-10-27
+Version: 0.96o, 2024-12-20
 
 This package is used during a test phase to load the new PDF management code
 of LaTeX.

Modified: trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/hyperref-generic.pdf
===================================================================
(Binary files differ)

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

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

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

Modified: trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-action.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-checkbox.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-choice.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-textfield.pdf
===================================================================
(Binary files differ)

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

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

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

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

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

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

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

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

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

Modified: trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/hyperref-generic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/hyperref-generic.dtx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/hyperref-generic.dtx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -82,7 +82,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.96n, released 2024-10-27}
+% \date{Version 0.96o, released 2024-12-20}
 %
 % \maketitle
 % \begin{documentation}
@@ -456,7 +456,7 @@
 %   \end{hypkey}
 %
 %  \subsection{Public interfaces}
-%  
+%
 %  \begin{variable}
 %   {\l_hyp_annot_colorlink_bool,
 %  \l_hyp_annot_colorurl_bool,
@@ -486,7 +486,7 @@
 %   \end{variable}
 %  \subsection{Changed behaviour}
 %   \begin{description}
-%   \item[colorlinks] |colorlinks| or |colorlinks=true| will as before disable the |pdfborder| 
+%   \item[colorlinks] |colorlinks| or |colorlinks=true| will as before disable the |pdfborder|
 %   (|colorlinks=false| will leave the |pdfborder| untouched), but it is possible
 %    to use the key in the document at any time, or to reenable the border if wanted.
 %    Internally |colorlinks| \& friends will no longer define/undefine
@@ -617,14 +617,14 @@
 %  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. 
+%  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. 
-%  
+%  it is possible to disable such nested links.
+%
 %  \section{Draftmode}
 %  pdftex and other engines knows a
 %  draftmode which can be set with |\pdfdraftmode=1|
@@ -965,7 +965,7 @@
 %<@@=hyp>
 %    \end{macrocode}
 %    \begin{macrocode}
-\ProvidesFile{hgeneric-testphase.def}[2024-10-27 v0.96n %
+\ProvidesFile{hgeneric-testphase.def}[2024-12-20 v0.96o %
   generic Hyperref driver for the LaTeX PDF management testphase bundle]
 
 \RequirePackage{etoolbox} %why?
@@ -1529,13 +1529,13 @@
      {
       \tl_if_blank:nTF {#1}
         { \cs_set_eq:NN\BKM at color\@empty }
-        { 
+        {
           \__hyp_color_set:ne {__hyp/tmpa}{#1}
           \color_export:nVN
             {__hyp/tmpa}
             \g__hyp_bordercolormodel_str
             \BKM at color
-        }    
+        }
      }
  }
 \legacy_if:nTF { Hy at bookmarks }
@@ -1543,7 +1543,7 @@
     \AddToHook{begindocument/before}[hyperref/bookmark]
      {
        \RequirePackage{bookmark}
-     }     
+     }
   }
 %    \end{macrocode}
 % empty hook chunk to ensure that the chunk exists.
@@ -1559,7 +1559,7 @@
 %
 % \section{Reference and label commands}
 % This uses the in-built property module.
-% 
+%
 % \begin{macro}
 %  {
 %    \@@_property_record:nn,
@@ -1579,7 +1579,7 @@
 % we generate a few variants. We use ee-variants as they already exist
 % in the module and once this is there it can go here.
 %    \begin{macrocode}
-\cs_generate_variant:Nn \@@_property_record:nn {ee}  
+\cs_generate_variant:Nn \@@_property_record:nn {ee}
 %    \end{macrocode}
 % \end{macro}
 % \section{Variables}
@@ -1708,12 +1708,14 @@
 \tl_set:Nn \l_@@_text_enc_para_print_tl {utf8/string}
 %    \end{macrocode}
 % \end{variable}
-% 
-% It is also unclear how the /Contents entry would look at best. 
+%
+% It is also unclear how the /Contents entry would look at best.
 % So we use sockets. The first argument is the target (url or destination),
 % For GoTo we also pass the text as argument.
-% The sockets should define \cs{l_@@_link_Contents_tl}
-% %    \begin{macrocode}
+% The sockets should put something into the relevant annotation dictionaries.
+% \changes{v0.96o}{2024-10-27}{moved dictionary command into socket so that
+% it can be fully replaced.}
+%    \begin{macrocode}
 \tl_new:N\l_@@_link_Contents_tl
 \socket_new:nn {hyp/link/GoTo/Contents}{2}
 \socket_new:nn {hyp/link/URI/Contents}{1}
@@ -1722,7 +1724,9 @@
     \@@_text_pdfstring:eoN
       { Go~to~destination~#1  }
       { \l_@@_text_enc_info_print_tl }
-      \l_@@_link_Contents_tl    
+      \l_@@_link_Contents_tl
+    \pdfannot_dict_put:nne {link/GoTo}{Contents}
+      {\l_@@_link_Contents_tl}
   }
 \socket_new_plug:nnn {hyp/link/URI/Contents}{default}
   {
@@ -1729,7 +1733,9 @@
     \@@_text_pdfstring:eoN
       { #1  }
       { \l_@@_text_enc_info_print_tl }
-      \l_@@_link_Contents_tl    
+      \l_@@_link_Contents_tl
+    \pdfannot_dict_put:nne {link/URI}{Contents}
+      {\l_@@_link_Contents_tl}
   }
 \socket_assign_plug:nn{hyp/link/GoTo/Contents}{default}
 \socket_assign_plug:nn{hyp/link/URI/Contents}{default}
@@ -1951,7 +1957,7 @@
   {
     \@@_text_pdfstring:noN  { #1 }{ \l_@@_text_enc_info_print_tl } #2
   }
-\cs_generate_variant:Nn \@@_text_pdfstring_info:nN {eN,oN} 
+\cs_generate_variant:Nn \@@_text_pdfstring_info:nN {eN,oN}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -2035,19 +2041,19 @@
 %
 % This driver defines for consistency also
 % |\hyper at linklaunch| for Launch and |\hyper at 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 
+% 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. 
+% 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}
  {
@@ -2066,12 +2072,12 @@
 %
 %    \begin{macrocode}
 \keys_define:nn { hyp }
-  { 
+  {
     nested-links .choice:,
-    nested-links / true .code:n = 
+    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 / false .code:n =
+     { \cs_set_eq:NN \@@_check_link_nesting:TF \@@_if_outer_link:TF },
     nested-links .default:n = {true}
   }
 %    \end{macrocode}
@@ -2251,17 +2257,15 @@
             \group_begin:
             \tl_set:Nn \l_hyp_current_dest_name_tl {#2}
 %    \end{macrocode}
-% this socket defines \cs{l_@@_link_Contents_tl}
+% this socket adds something to the /Contents key.
 %    \begin{macrocode}
             \socket_use:nnn{hyp/link/GoTo/Contents}{#2}{#3}
-            \pdfannot_dict_put:nne {link/GoTo}{Contents}
-              {\l_@@_link_Contents_tl}
             \hook_use:n {hyp/link/#1}
             \@@_link_goto_begin:nw {#2}#3\Hy at xspace@end
             \@@_link_goto_end:
             \group_end:
             \Hy at VerboseLinkStop
-          } 
+          }
           {
             \group_begin: #3\group_end:
           }
@@ -2279,12 +2283,13 @@
             \Hy at VerboseLinkStart{#1}{#2}% only for debug
             \group_begin:
             \tl_set:Nn \l_hyp_current_dest_name_tl {#2}
+            \socket_use:nnn{hyp/link/GoTo/Contents}{#2}{}
             \hook_use:n {hyp/link/#1}
             \@@_link_goto_begin:nw {#2}
-          } 
+          }
           {
-            \group_begin:          
-          } 
+            \group_begin:
+          }
       }
   }
 
@@ -2300,7 +2305,7 @@
           }
           {
             \group_end:
-          }  
+          }
         \int_gdecr:N\g_@@_linknestlevel_int
       }
   }
@@ -2331,15 +2336,14 @@
                \pdfdict_put:nnn{l_hyp/annot/A/URI}{IsMap}{true}
               }
 %    \end{macrocode}
-% This socket defines \cs{l_@@_link_Contents_tl}
+% This socket adds something to the /Contents key.
 %    \begin{macrocode}
-            \socket_use:nn{hyp/link/URI/Contents}{#2}                    
-            \pdfannot_dict_put:nne {link/URI}{Contents}{\l_@@_link_Contents_tl}              
+            \socket_use:nn{hyp/link/URI/Contents}{#2}
             \cs_set_eq:NN \# \c_hash_str
             \cs_set_eq:NN \% \c_percent_str
             \Hy at safe@activestrue
             \mode_leave_vertical:
-            \pdfannot_dict_put:nne {link/URI}{A}{<<\pdfdict_use:n {l_hyp/annot/A/URI}>>}            
+            \pdfannot_dict_put:nne {link/URI}{A}{<<\pdfdict_use:n {l_hyp/annot/A/URI}>>}
             \pdfannot_link:nen { URI }
               {
               }
@@ -2350,7 +2354,7 @@
                 \Hy at VerboseLinkStop %where is the start??
               }
             \group_end:
-           } 
+           }
            {
              \group_begin: #1 \group_end:
            }
@@ -2425,7 +2429,7 @@
                 \Hy at VerboseLinkStop %where is the start??
               }
             \group_end:
-          }  
+          }
           {
             \group_begin: #1 \group_end:
           }
@@ -2470,7 +2474,7 @@
                  \pdfdict_remove:nn {l_hyp/annot/A/Launch}{Win}
                }
                {
-                 \pdfdict_put:nne 
+                 \pdfdict_put:nne
                    {l_hyp/annot/A/Launch}
                    {Win}
                    {<</P \l_@@_para_tmpa_tl /F \l_@@_filename_tmpa_tl >>}
@@ -2549,7 +2553,7 @@
                 #2
               }
            \group_end:
-          } 
+          }
           { \group_begin: #2 \group_end: }
         \int_gdecr:N\g_@@_linknestlevel_int
       }
@@ -2684,7 +2688,7 @@
         ,colorrun  =#1
         ,colormenu =#1
         ,colorfile =#1
-        }        
+        }
     ,colorlinks .default:n = {true}
   }
 %    \end{macrocode}
@@ -3632,8 +3636,8 @@
      }
    ,pdfprintclip / unknown .code:n =
      {
-       \msg_warning:nneee 
-         { hyp } 
+       \msg_warning:nneee
+         { hyp }
          { unknown-choice+empty }
          { pdfprintclip }
          { MediaBox, CropBox, BleedBox, TrimBox, ArtBox }
@@ -3970,7 +3974,7 @@
         pdf#1  .code:n =
           {
             \tl_set:Ne\l_@@_tmpa_tl {\text_expand:n{##1}}
-            \@@_store_metadata:no {pdf#1}{\l_@@_tmpa_tl}            
+            \@@_store_metadata:no {pdf#1}{\l_@@_tmpa_tl}
             \tl_if_empty:NTF \l_@@_tmpa_tl
               {
                 \str_case:nnF { #1 }
@@ -3991,7 +3995,7 @@
                  }
               }
               {
-                \tl_set:Ne\l_@@_tmpb_tl {\clist_item:on{\l_@@_tmpa_tl}{1}}                
+                \tl_set:Ne\l_@@_tmpb_tl {\clist_item:on{\l_@@_tmpa_tl}{1}}
                 \exp_args:NNV
                  \regex_extract_once:NnN \l_@@_optlang_regex \l_@@_tmpb_tl\l_@@_tmpa_seq
                 \seq_if_empty:NTF\l_@@_tmpa_seq
@@ -3998,7 +4002,7 @@
                  {
                    \@@_text_pdfstring_info:oN {\l_@@_tmpa_tl}\l_@@_tmpa_str
                  }
-                 {                   
+                 {
                    \@@_text_pdfstring_info:eN {\seq_item:Nn \l_@@_tmpa_seq{3}}\l_@@_tmpa_str
                  }
                 \str_if_eq:VnF\l_@@_tmpa_str{<FEFF>}
@@ -4005,7 +4009,7 @@
                   {
                     \pdfmanagement_add:nne {Info}{#2}{\l_@@_tmpa_str}
                   }
-              }             
+              }
           }
       }
     \keys_define:nn { hyp / info }
@@ -4024,10 +4028,10 @@
                   {
                     \pdfmanagement_add:nne {Info}{#2}{\l_@@_tmpa_str}
                   }
-              }            
+              }
           }
         ,unknown .code:n =
-         {            
+         {
             \@@_text_pdfstring_info:eN {##1}\l_@@_tmpa_str
             \str_if_eq:VnF\l_@@_tmpa_str{<FEFF>}
               {
@@ -4494,7 +4498,7 @@
     \@@_property_record:ee {HyAnn@\the\HyAnn at Count}{abspage}
     \property_ref_undefined_warn:ee {HyAnn@\the\HyAnn at Count}{abspage}
   }%
-\prg_generate_conditional_variant:Nnn \property_if_recorded:nn {ee} {T}  
+\prg_generate_conditional_variant:Nnn \property_if_recorded:nn {ee} {T}
 \def\Fld at pageobjref
   {
     \property_if_recorded:eeT {HyAnn@\the\HyAnn at Count}{abspage}

Modified: trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3backend-testphase.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3backend-testphase.dtx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3backend-testphase.dtx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -45,7 +45,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.96n, released 2024-10-27}
+% \date{Version 0.96o, released 2024-12-20}
 %
 % \maketitle
 %
@@ -56,27 +56,27 @@
 %    \begin{macrocode}
 %<drivers>\ProvidesExplFile
 %<*dvipdfmx>
-  {l3backend-testphase-dvipdfmx.def}{2024-10-27}{}
+  {l3backend-testphase-dvipdfmx.def}{2024-12-20}{}
   {LaTeX~PDF~management~testphase~bundle~backend~support: dvipdfmx}
 %</dvipdfmx>
 %<*dvips>
-  {l3backend-testphase-dvips.def}{2024-10-27}{}
+  {l3backend-testphase-dvips.def}{2024-12-20}{}
   {LaTeX~PDF~management~testphase~bundle~backend~support: dvips}
 %</dvips>
 %<*dvisvgm>
-  {l3backend-testphase-dvisvgm.def}{2024-10-27}{}
+  {l3backend-testphase-dvisvgm.def}{2024-12-20}{}
   {LaTeX~PDF~management~testphase~bundle~backend~support: dvisvgm}
 %</dvisvgm>
 %<*luatex>
-  {l3backend-testphase-luatex.def}{2024-10-27}{}
+  {l3backend-testphase-luatex.def}{2024-12-20}{}
   {LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (LuaTeX)}
 %</luatex>
 %<*pdftex>
-  {l3backend-testphase-pdftex.def}{2024-10-27}{}
+  {l3backend-testphase-pdftex.def}{2024-12-20}{}
   {LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (pdfTeX)}
 %</pdftex>
 %<*xdvipdfmx>
-  {l3backend-testphase-xetex.def}{2024-10-27}{}
+  {l3backend-testphase-xetex.def}{2024-12-20}{}
   {LaTeX~PDF~management~testphase~bundle~backend~support: XeTeX}
 %</xdvipdfmx>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfannot.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfannot.dtx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfannot.dtx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -48,7 +48,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.96n, released 2024-10-27}
+% \date{Version 0.96o, released 2024-12-20}
 %
 % \maketitle
 % \begin{documentation}
@@ -432,7 +432,7 @@
 %    \begin{macrocode}
 %<@@=pdfannot>
 %<*header>
-\ProvidesExplPackage{l3pdfannot}{2024-10-27}{0.96n}
+\ProvidesExplPackage{l3pdfannot}{2024-12-20}{0.96o}
   {PDF-annotations}
 \RequirePackage{l3pdfdict}
 %</header>

Modified: trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfdict.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfdict.dtx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfdict.dtx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -49,7 +49,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.96n, released 2024-10-27}
+% \date{Version 0.96o, released 2024-12-20}
 %
 % \maketitle
 % \begin{documentation}
@@ -208,7 +208,7 @@
 %    \begin{macrocode}
 %<@@=pdfdict>
 %<*header>
-\ProvidesExplPackage{l3pdfdict}{2024-10-27}{0.96n}
+\ProvidesExplPackage{l3pdfdict}{2024-12-20}{0.96o}
   {Tools for PDF dictionaries (LaTeX PDF management testphase bundle)}
 %</header>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-action.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-action.dtx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-action.dtx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -49,7 +49,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.96n, released 2024-10-27}
+% \date{Version 0.96o, released 2024-12-20}
 %
 % \maketitle
 % \begin{documentation}

Modified: trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-checkbox.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-checkbox.dtx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-checkbox.dtx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -64,7 +64,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.96n, released 2024-10-27}
+% \date{Version 0.96o, released 2024-12-20}
 %
 % \maketitle
 % \begin{documentation}
@@ -422,7 +422,7 @@
       {
         \@@_field:n { @@/checkbox/#1 }
       }
-    \keys_set:nn {pdffield}{parent=@@/checkbox/#1}
+    \keys_set:nn {pdffield}{parent={@@/checkbox/#1}}
   }
 \cs_generate_variant:Nn \@@_checkbox_field:n {V}
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-choice.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-choice.dtx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-choice.dtx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -49,7 +49,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.96n, released 2024-10-27}
+% \date{Version 0.96o, released 2024-12-20}
 %
 % \maketitle
 % \begin{documentation}
@@ -520,7 +520,7 @@
 %    \begin{macrocode}
         \@@_field:n { @@/choice/#1 }
       }
-    \keys_set:nn {pdffield}{parent=@@/choice/#1}
+    \keys_set:nn {pdffield}{parent={@@/choice/#1}}
   }
 \cs_generate_variant:Nn \@@_choice_field:n {V}
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-pushbutton.dtx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-pushbutton.dtx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -55,7 +55,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.96n, released 2024-10-27}
+% \date{Version 0.96o, released 2024-12-20}
 %
 % \maketitle
 % \begin{documentation}
@@ -679,7 +679,7 @@
       {
         \@@_field:n { @@/pushbutton/#1 }
       }
-    \keys_set:nn {pdffield}{parent=@@/pushbutton/#1}
+    \keys_set:nn {pdffield}{parent={@@/pushbutton/#1}}
   }
 \cs_generate_variant:Nn \@@_pushbutton_field:n {V}
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-radiobutton.dtx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-radiobutton.dtx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -83,7 +83,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.96n, released 2024-10-27}
+% \date{Version 0.96o, released 2024-12-20}
 %
 % \maketitle
 % \begin{documentation}
@@ -737,7 +737,7 @@
          }
       }
       }
-    \keys_set:nn {pdffield}{parent=@@/radio/#1}
+    \keys_set:nn {pdffield}{parent={@@/radio/#1}}
   }
 \cs_generate_variant:Nn \@@_radio_field:n {V}
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-textfield.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-textfield.dtx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-textfield.dtx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -49,7 +49,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.96n, released 2024-10-27}
+% \date{Version 0.96o, released 2024-12-20}
 %
 % \maketitle
 % \begin{documentation}
@@ -513,7 +513,7 @@
       {
         \@@_field:n { @@/textfield/#1 }
       }
-    \keys_set:nn {pdffield}{parent=@@/textfield/#1}
+    \keys_set:nn {pdffield}{parent={@@/textfield/#1}}
   }
 \cs_generate_variant:Nn \@@_textfield_field:n {V}
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield.dtx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield.dtx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -69,7 +69,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.96n, released 2024-10-27}
+% \date{Version 0.96o, released 2024-12-20}
 %
 % \maketitle
 % \begin{documentation}
@@ -972,7 +972,7 @@
 %<*package>
 %<@@=pdffield>
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesExplPackage{l3pdffield-testphase}{2024-10-27}{0.96n}%
+\ProvidesExplPackage{l3pdffield-testphase}{2024-12-20}{0.96o}%
   {form fields}
 %    \end{macrocode}
 % \subsection{hyperref specific command}

Modified: trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffile.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffile.dtx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffile.dtx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -49,7 +49,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.96n, released 2024-10-27}
+% \date{Version 0.96o, released 2024-12-20}
 %
 % \maketitle
 % \begin{documentation}
@@ -205,6 +205,12 @@
 % has to be added explicitly as there is no sensible way
 % to retrieve this automatically.
 % \item The mimetype (in the |/Subtype|) should be properly escaped.
+% So for example
+% \begin{verbatim}
+% \pdfdict_put:nne{l_pdffile}{Subtype}{/application\string#2Fx-tex}
+% \end{verbatim}
+% But while it is possible to set the subtype like this, it is normally better
+% to rely on the file extension and to let the code autodetect the subtype.
 % This module contains a property list with maps a number of file extensions
 % to mimetypes and the commands try to detect and fill the mimetype automatically.
 % \item The dictionary can contain additional keys (|/Filter|, |/DecodeParms|),
@@ -337,9 +343,10 @@
 %
 %  \begin{verbatim}
 %  \pdf_object_new:n {module/filespec/A} % a new filespec object
-%  \pdf_object_ref:n {module/filespec/A}       % a reference
-%  \pdf_object_unnamed_write:nn { stream }{ {...}{content} } %writing the stream
-%  % filling and writing the filespec dictionary:
+%  \pdf_object_ref:n {module/filespec/A} % reference it somewhere, e.g. in AF
+%  % now write the stream
+%  \pdf_object_unnamed_write:nn { stream }{ {...}{content} }
+%  % and fill and write the filespec dictionary:
 %  \pdffile_filespec:nnn {module/filespec/A}{A.xml}{\pdf_object_ref_last:}
 %  \end{verbatim}
 %
@@ -356,6 +363,24 @@
 %   are not supported.
 % \end{variable}
 %
+% \begin{variable} {\g_pdffile_embed_pdfa_int,\g_pdffile_embed_nonpdfa_int}
+% These two integers hold the number of embedded files  in PDF/A format
+% and non-PDF/A format and can be used for a rough test for the requirements
+% in l3pdfmeta  |no_embed_content| (both should be zero)
+% and |only_pdfa_embed_content| (the second should be zero).
+% The commands |\pdffile_embed_stream:...| and |\pdffile_embed_file:...|
+% increase the integers. As the code can currently not detect if an embedded
+% file follows a PDF/A standard it simply goes by the extension: files embedded
+% as |.pdf| increase the first integer.
+%
+% |\pdffile_filespec:nnn| does \emph{not} increase the integers,
+% if this command is used it lies in the responsability of the
+% author to adjust the integers.
+%
+% The integers are public so that user
+% can query and adjust the values, e.g. in tests for a standard compliancy.
+% \end{variable}
+%
 % \begin{variable}{\l_pdffile_source_name_str}
 % This variable is set at the begin of \cs{pdffile_embed_file:nnn}. It can be
 % (and is) used in the file dictionaries, see table~\ref{tab:filedict} for examples.
@@ -398,7 +423,7 @@
 %
 %    \begin{macrocode}
 %<*header>
-\ProvidesExplPackage{l3pdffile}{2024-10-27}{0.96n}
+\ProvidesExplPackage{l3pdffile}{2024-12-20}{0.96o}
   {embedding and referencing files in PDF---LaTeX PDF management testphase bundle}
 \RequirePackage{l3pdftools}  %temporarily!!
 %</header>
@@ -438,6 +463,8 @@
      #1
   }
 %    \end{macrocode}
+%
+% \subsection{Variables}
 % \begin{variable}
 %   {
 %     \l_@@_tmpa_tl,
@@ -484,6 +511,28 @@
     ,.xml = application/xml
   }
 %    \end{macrocode}
+%
+% \begin{variable} {\g_pdffile_embed_pdfa_int,\g_pdffile_embed_nonpdfa_int}
+% These two integers hold the number of embedded files  in PDF/A format
+% and non-PDF/A format and can be used for a rough test for the requirements
+% in l3pdfmeta  |no_embed_content| (both should be zero)
+% and |only_pdfa_embed_content| (the second should be zero).
+% The commands |\pdffile_embed_stream:...| and |\pdffile_embed_file:...|
+% increase the integers. As the code can currently not detect if an embedded
+% file follows a PDF/A standard it simply goes by the extension: files embedded
+% as |.pdf| increase the first integer.
+%
+% |\pdffile_filespec:nnn| does \emph{not} increase the integers,
+% if this command is used it lies in the responsability of the
+% author to adjust the integers.
+%
+% The integers are public so that user
+% can query and adjust the values, e.g. in tests for a standard compliancy.
+%    \begin{macrocode}
+\int_new:N\g_pdffile_embed_pdfa_int
+\int_new:N\g_pdffile_embed_nonpdfa_int
+%    \end{macrocode}
+% \end{variable}
 % \begin{variable}
 %  {
 %   \l_pdffile_source_name_str
@@ -550,13 +599,15 @@
 % \begin{macro}{\pdffile_embed_file:nnn, \pdffile_embed_stream:nnn, \pdffile_embed_stream:nnN}
 % At first a command to set the mimetype. It either uses the current value
 % in the file dictionary, or tries to guess it from the extension.
-% \begin{macro}{\@@_mimetype_set:nN,\@@_mimetype_set:VN}
+%
+% \begin{macro}{\@@_mimetype_set:nNN,\@@_mimetype_set:VNN}
 % \begin{macro}{\@@_fstream_write:nN, \@@_fstream_write:VN}
 % \begin{macro}{\@@_stream_write:nN, \@@_stream_write:VN}
 %    \begin{macrocode}
 %#1 file name,
 %#2 tl to return the (printed) value for the guessed mimetype
-\cs_new_protected:Npn \@@_mimetype_set:nN #1 #2
+%#3 tl to return the file extension (that is a string)
+\cs_new_protected:Npn \@@_mimetype_set:nNN #1 #2 #3
   {
     \file_parse_full_name:nNNN
           {#1}
@@ -563,30 +614,39 @@
           \l_@@_tmpa_str %unused
           \l_@@_tmpb_str %unused
           \l_@@_ext_str
-        %check if Subtype has been set
-        \pdfdict_get:nnN { l_pdffile}{Subtype}\l_@@_tmpa_tl
-        %if not look up in the prop:
-        \quark_if_no_value:NT \l_@@_tmpa_tl
+    %check if Subtype has been set
+    \pdfdict_get:nnN { l_pdffile}{Subtype}\l_@@_tmpa_tl
+    %if not look up in the prop:
+    \quark_if_no_value:NT \l_@@_tmpa_tl
+      {
+        \prop_get:NVNTF
+          \g_pdffile_mimetypes_prop
+          \l_@@_ext_str
+          \l_@@_tmpb_tl
           {
-            \prop_get:NVNTF
-              \g_pdffile_mimetypes_prop
-              \l_@@_ext_str
-              \l_@@_tmpb_tl
-              {
-                \tl_set:Ne #2 {/Subtype~\pdf_name_from_unicode_e:V \l_@@_tmpb_tl}
-              }
-              {
-                \msg_warning:nne { pdffile }{ mimetype-missing} {#1}
-                \tl_clear:N #2
-              }
+            \tl_set:Ne #2 {/Subtype~\pdf_name_from_unicode_e:V \l_@@_tmpb_tl}
           }
-    }
+          {
+            \msg_warning:nne { pdffile }{ mimetype-missing} {#1}
+            \tl_clear:N #2
+          }
+      }
+     \tl_set_eq:NN #3 \l_@@_ext_str
+   }
 
-\cs_generate_variant:Nn \@@_mimetype_set:nN {VN}
+\cs_generate_variant:Nn \@@_mimetype_set:nNN {VNN}
 
+% #1 tl containing a file extension
+\cs_new_protected:Npn \@@_count_embed:N #1
+  {
+    \str_if_eq:VnTF #1 {.pdf}
+     {\int_gincr:N \g_pdffile_embed_pdfa_int }
+     {\int_gincr:N \g_pdffile_embed_nonpdfa_int }
+  }
+
 %#1 file name,
 %#2 tl, should be empty or contain /Subtype /mimetype
-%   e.g. result from \@@_mimetype_set:NN
+%   e.g. result from \@@_mimetype_set:nNN
 \cs_new_protected:Npn \@@_fstream_write:nN #1 #2
   {
     \pdf_object_unnamed_write:ne { fstream }
@@ -611,7 +671,7 @@
 
 %#1 file content
 %#2 tl, should be empty or contain /Subtype /mimtype
-%   e.g. result from \@@_mimetype_set:NN
+%   e.g. result from \@@_mimetype_set:nNN
 \cs_new_protected:Npn \@@_stream_write:nN #1 #2
   {
     \pdf_object_unnamed_write:ne { stream }
@@ -647,7 +707,7 @@
         \group_begin:
           \pdf_string_from_unicode:nnN {utf8/string}{#2}\l_@@_tmpa_str
           \pdfdict_put:nne {l_pdffile/Filespec}{F} { \l_@@_tmpa_str }
-          \@@_filename_convert_to_print:nN  { #2 } \l_@@_tmpa_str          
+          \@@_filename_convert_to_print:nN  { #2 } \l_@@_tmpa_str
           \pdfdict_put:nne {l_pdffile/Filespec}{UF}{ \l_@@_tmpa_str }
           \pdf_object_write:nne { #1 } { dict }
             {
@@ -682,7 +742,7 @@
                   /EF <</F~#2 /UF~#2>>
                 }
             }
-        \tl_gset:Ne\g_@@_tmpa_tl{\pdf_object_ref_last:}    
+        \tl_gset:Ne\g_@@_tmpa_tl{\pdf_object_ref_last:}
         \group_end:
         \tl_set_eq:NN#3\g_@@_tmpa_tl
       }
@@ -708,9 +768,11 @@
           {
             \file_get_full_name:nNTF {#1} \l_pdffile_source_name_str
               {
-                \@@_mimetype_set:VN
+                \@@_mimetype_set:VNN
                   \l_pdffile_source_name_str
                   \l_@@_automimetype_tl
+                  \l_@@_tmpa_tl
+                \@@_count_embed:N \l_@@_tmpa_tl
                 \@@_fstream_write:VN
                   \l_pdffile_source_name_str
                   \l_@@_automimetype_tl
@@ -772,8 +834,9 @@
             { #3 }
             {{stream}{}{\tl_if_blank:nTF {#2}{stream.txt}{\exp_not:n{#2}}}}
          \tl_if_blank:nTF {#2}
-          { \@@_mimetype_set:nN {stream.txt}\l_@@_automimetype_tl}
-          { \@@_mimetype_set:nN { #2 } \l_@@_automimetype_tl }
+          { \@@_mimetype_set:nNN {stream.txt}\l_@@_automimetype_tl \l_@@_tmpa_tl}
+          { \@@_mimetype_set:nNN { #2 } \l_@@_automimetype_tl \l_@@_tmpa_tl }
+         \@@_count_embed:N \l_@@_tmpa_tl
          \@@_stream_write:nN
            { #1 }
            \l_@@_automimetype_tl
@@ -791,8 +854,9 @@
 \cs_new_protected:Npn \pdffile_embed_stream:nnN #1 #2 #3
   {
      \tl_if_blank:nTF {#2}
-      { \@@_mimetype_set:nN {stream.txt}\l_@@_automimetype_tl}
-      { \@@_mimetype_set:nN { #2 } \l_@@_automimetype_tl }
+      { \@@_mimetype_set:nNN {stream.txt}\l_@@_automimetype_tl \l_@@_tmpa_tl}
+      { \@@_mimetype_set:nNN { #2 } \l_@@_automimetype_tl \l_@@_tmpa_tl }
+     \@@_count_embed:N\l_@@_tmpa_tl
      \@@_stream_write:nN
        { #1 }
        \l_@@_automimetype_tl
@@ -806,10 +870,10 @@
      \prop_gput:Nee
         \g_pdffile_embed_prop
         { #3 }
-        {{stream}{}{\tl_if_blank:nTF {#2}{stream.txt}{\exp_not:n{#2}}}}         
+        {{stream}{}{\tl_if_blank:nTF {#2}{stream.txt}{\exp_not:n{#2}}}}
   }
-  
 
+
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}

Modified: trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfmanagement.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfmanagement.dtx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfmanagement.dtx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -57,7 +57,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.96n, released 2024-10-27}
+% \date{Version 0.96o, released 2024-12-20}
 %
 % \maketitle
 % \begin{documentation}
@@ -347,7 +347,10 @@
 %     \cs{pdfmanagement_add:nnn} \{ThisPage\} \Arg{name} \Arg{value}
 %   \end{syntax}
 %   Adds |/|\meta{name} \meta{value} at \emph{shipout} to the page dictionary of the
-%   current page. Current page means here the \emph{shipout} page.
+%   current page. Current page means here the \emph{shipout} page. \emph{shipout} means
+%   at the end of the \texttt{shipout/background} hook. Code that wants to set a value
+%   in a shipout hook should use the \texttt{shipout/background} hook too. Other hooks
+%   are either too early or too late.%
 %   It is always stored globally.
 %   If \Arg{name} has already a value set in the \texttt{Page}
 %   dictionary it will be overwritten for this page.
@@ -632,7 +635,7 @@
 %<@@=pdfmanagement>
 %<*header>
 %
-\ProvidesExplPackage{l3pdfmanagement}{2024-10-27}{0.96n}
+\ProvidesExplPackage{l3pdfmanagement}{2024-12-20}{0.96o}
   {Management of core PDF dictionaries (LaTeX PDF management testphase bundle)}
 %</header>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfmeta.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfmeta.dtx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfmeta.dtx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -49,7 +49,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.96n, released 2024-10-27}
+% \date{Version 0.96o, released 2024-12-20}
 %
 % \maketitle
 % \begin{documentation}
@@ -182,15 +182,20 @@
 % \item[|no_embed_content|]    no |/EF| key in filespec, no |/Type/EmbeddedFiles|.
 %  \emph{This will be checked in future by \pkg{l3pdffiles}
 %  for the files it embeds.}
-%  The restrictment is set for only PDF/A-1b.
-%  PDF/A-2b and PDF/A3-b lifted this restriction: PDF/A-2b allows
+%  The restriction is set only for PDF/A-1 versions.
+%  PDF/A-2 and PDF/A-3 lifted this restriction: PDF/A-2 allows
 %  to embed other PDF documents conforming to either PDF/A-1 or PDF/A-2,
-%  and PDF/A-3 allows any embedded files. I don't see a way to test the
-%  PDF/A-2b requirement so currently it will simply allow everything. Perhaps
+%  and PDF/A-3 and PDF/A-4F allows any embedded files.
+%
+% \item[|only_pdfa_embed_content|]
+%  This is set for PDF/A-2a, PDF/A-2b, PDF/A-2u and PDF/A-4.
+%  I don't see a way to test the
+%  PDF/A-2 requirement so currently it will simply allow everything. Perhaps
 %  a test for at least the PDF-format will be added in future.
+%
 % \item[|Catalog_no_OCProperties|] don't add |/OCProperties| to the catalog
 % {\em l3pdfmeta removes this entry at the end of the document}
-% \item[|Catalog_OCProperties_no_AS|] 
+% \item[|Catalog_OCProperties_no_AS|]
 % do not use |/AS| optional content configuration dictionary.
 % \item[|Catalog_EmbeddedFiles|] ensure that an |EmbeddedFiles| name tree is
 % in the catalog. This is required for PDF/A-4f.
@@ -205,10 +210,10 @@
 % \item[|tagged|] that is set in A-2a and A-3a and means that the pdf must be
 % tagged. This is currently neither tested not enforced somewhere.
 % \item[|no_CharSet|] CharSet is deprecated is pdf 2.0 and should not
-% be used in A-4. l3pdfmeta will therefore suppress it for the 
+% be used in A-4. l3pdfmeta will therefore suppress it for the
 % engines pdftex and luatex (the other engines have no suitable option)
 % \item[|omit_CID|] This avoids with PDF/A-2 and newer a failure
-% because of with missing CID identifications 
+% because of with missing CID identifications
 % (e.g. from rule ISO 19005-2:2011, Clause: 6.2.11.4.2)
 % It has only with luatex an effect.
 % \item[|Trailer_no_Info|] The \texttt{Info} dictionary
@@ -219,7 +224,7 @@
 % it should only contain the \texttt{/ModDate} entry. In
 % texlive 2023 the engines pdftex and luatex have primitives
 % to suppress the dictionary
-% and l3pdfmeta will make use of it. 
+% and l3pdfmeta will make use of it.
 % \end{description}
 %
 % \subsubsection{Tests with values and special handlers}
@@ -357,8 +362,8 @@
 % This sets various metadata to values needed by the \LaTeX{}
 % regression tests.
 % It also sets the seed for random functions.
-% If a current l3backend is used and \cs{c_sys_timestamp_str} is available, 
-% the command does not set dates, but 
+% If a current l3backend is used and \cs{c_sys_timestamp_str} is available,
+% the command does not set dates, but
 % assumes that the environment variable \verb+SOURCE_DATE_EPOCH+ is used.
 % \end{function}
 %
@@ -468,11 +473,11 @@
 %
 % \subsubsection{Declarations}
 % PDF knows beside standards also a more generic method to declare conformance
-% to some specification by adding a declaration, 
+% 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}
@@ -489,10 +494,10 @@
 % \ExplSyntaxOff
 % \begin{document}
 %  text
-% \end{document} 
-% 
+% \end{document}
+%
 % \end{verbatim}
-% 
+%
 % \subsubsection{Dates}
 % \begin{itemize}
 % \item
@@ -560,7 +565,7 @@
 % The keys |pdfcopyright| and |pdflicenseurl| work similar as in \pkg{hyperxmp}.
 % But differently to \pkg{hyperxmp} the code doesn't set the |xmpRights:Marked|
 % property, as I have some doubts that one deduce its value simply
-% by checking if the other keys have been used; if needed it can be added by 
+% by checking if the other keys have been used; if needed it can be added by
 % using one of these settings (true means with copyright, false means public domain).
 % \begin{verbatim}
 % \AddToDocumentProperties[document]{copyright}{true}
@@ -604,13 +609,13 @@
 % \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 
+% 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 escape it
 % and use the \texttt{e} variant to expand it.
 % \end{function}
-% 
+%
 % \begin{function}{\pdfmeta_xmp_add_declaration:nnnnn,
 %  \pdfmeta_xmp_add_declaration:ennnn,
 %  \pdfmeta_xmp_add_declaration:eeenn}
@@ -617,20 +622,20 @@
 % \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 
+% 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. 
+% argument the |claimData| are concatenated. There is no check if the |claimData| are identical.
 % \end{function}
-% 
+%
 % The following two commands can be used to extend the schema declarations in
 % the XMP metadata. This is for example needed to implement a standard like ZUGferd/Factur X
 % for invoices. A schema declaration should be added only once but as this task
 % is probably not needed frequently only light guards are there to avoid duplicated entries.
-%  
+%
 % \begin{function}{\pdfmeta_xmp_schema_new:nnn}
 % \begin{syntax}
 % \cs{pdfmeta_xmp_schema_new:nnn}\Arg{text}\Arg{prefix}\Arg{uri}
@@ -638,9 +643,9 @@
 % \meta{text} is some string describing the schema, e.g. |PDF/A~Identification~Schema|,
 % \meta{prefix} is the unique prefix used by the schema. This prefix
 % must be declared first with |\pdfmeta_xmp_xmlns_new:nn|. If a schema with this prefix
-% has already been declared, it will currently be ignored with a warning. 
+% has already been declared, it will currently be ignored with a warning.
 % The \meta{uri} is expanded, so a
-% hash can for example be given as |\c_hash_str|. 
+% hash can for example be given as |\c_hash_str|.
 % \end{function}
 
 % \begin{function}{\pdfmeta_xmp_property_new:nnnnn}
@@ -649,14 +654,14 @@
 % \end{syntax}
 % If the new property already exists in the schema
 % (as identified by the combination of \meta{schema prefix}
-% and \meta{name} the property is silently ignore. 
+% and \meta{name} the property is silently ignore.
 % \meta{schema prefix} is the prefix declared with the previous command.
 % schema, e.g. |PDF/A~Identification~Schema|,
 % \meta{name} is a short string that identifies the property, e.g. |xmpMM| or |year|. It must be
-% unique in the properties of a schema. \meta{type} is e.g. |URI| or |Integer| or |Text|, 
-% \meta{category} is e.g. |internal| or |external|, \meta{description} is a free description string. 
+% unique in the properties of a schema. \meta{type} is e.g. |URI| or |Integer| or |Text|,
+% \meta{category} is e.g. |internal| or |external|, \meta{description} is a free description string.
 % \end{function}
-% 
+%
 % \end{documentation}
 %
 % \begin{implementation}
@@ -666,7 +671,7 @@
 %    \begin{macrocode}
 %<@@=pdfmeta>
 %<*header>
-\ProvidesExplPackage{l3pdfmeta}{2024-10-27}{0.96n}
+\ProvidesExplPackage{l3pdfmeta}{2024-12-20}{0.96o}
   {PDF-Standards---LaTeX PDF management testphase bundle}
 %</header>
 %    \end{macrocode}
@@ -680,6 +685,15 @@
 \msg_new:nnn  {pdf }{wrong-pdfversion}
   {PDF~version~#1~is~too~#2~for~standard~'#3'.}
 %    \end{macrocode}
+% Messages for embedded files
+%    \begin{macrocode}
+\msg_new:nnn  {pdf }{validation-failure}
+  {
+    PDF~standard~validation~failure.\\
+    #1
+  }
+%    \end{macrocode}
+%
 % \begin{variable}{\l_@@_tmpa_tl,\l_@@_tmpb_tl,\l_@@_tmpa_str,
 %  \g_@@tmpa_str,\l_@@_tmpa_seq,\l_@@_tmpb_seq}
 %    \begin{macrocode}
@@ -855,7 +869,7 @@
     \pdfmeta_standard_verify:nF { no_CharSet }
      { \__pdf_backend_omit_charset:n {1} }
     \pdfmeta_standard_verify:nF { omit_CID }
-     { \__pdf_backend_omit_cidset:n {1} }         
+     { \__pdf_backend_omit_cidset:n {1} }
     \pdfmeta_standard_verify:nnF { min_pdf_version }
      { \pdf_version: }
      { \msg_warning:nneee {pdf}{wrong-pdfversion}
@@ -894,6 +908,7 @@
 %   \g_@@_standard_pdf/A-3B_prop ,
 %   \g_@@_standard_pdf/A-3U_prop ,
 %   \g_@@_standard_pdf/A-4_prop ,
+%   \g_@@_standard_pdf/A-4F_prop ,
 %   }
 %     \begin{macrocode}
 \prop_new:c { g_@@_standard_pdf/A-1B_prop }
@@ -925,7 +940,7 @@
     ,Catalog_no_OCProperties =
     % Rule 6.9-4 The AS key shall not appear in any optional content configuration dictionary.
     % actually only starting with A-2 but doesn't harm here either
-    ,Catalog_OCProperties_no_AS=  
+    ,Catalog_OCProperties_no_AS=
     %===============
     % Rule 6.6.1-1: PDAction, S == "GoTo" || S == "GoToR" || S == "Thread"
     %               || S == "URI" || S == "Named" || S == "SubmitForm"
@@ -971,16 +986,20 @@
 % embedding files is allowed (with restrictions)
 \prop_gremove:cn
   { g_@@_standard_pdf/A-2B_prop }
-  { embed_content}
+  { no_embed_content }
 \prop_gput:cnn
+  { g_@@_standard_pdf/A-2B_prop }
+  { only_pdfa_embed_content }
+  {}
+\prop_gput:cnn
   { g_@@_standard_pdf/A-2B_prop }{max_pdf_version}{1.7}
 \prop_gput:cnn
   { g_@@_standard_pdf/A-2B_prop }{omit_CID}{}
-% OCG layers are allowed (with restrictions)  
+% OCG layers are allowed (with restrictions)
 \prop_gremove:cn
   { g_@@_standard_pdf/A-2B_prop }
   { Catalog_no_OCProperties }
-  
+
   %A-2u ==============
 \prop_new:c { g_@@_standard_pdf/A-2U_prop }
 \prop_gset_eq:cc
@@ -1017,10 +1036,10 @@
   { g_@@_standard_pdf/A-3B_prop }{year}{2012}
 \prop_gput:cnn
   { g_@@_standard_pdf/A-3B_prop }{level}{3}
-% embedding files is allowed (with restrictions)
+% embedding files is allowed
 \prop_gremove:cn
   { g_@@_standard_pdf/A-3B_prop }
-  { embed_content}
+  { only_pdfa_embed_content }
 %A-3u ==============
 \prop_new:c { g_@@_standard_pdf/A-3U_prop }
 \prop_gset_eq:cc
@@ -1062,12 +1081,14 @@
   { g_@@_standard_pdf/A-4_prop }{no_CharSet}{}
 \prop_gput:cnn
   { g_@@_standard_pdf/A-4_prop }{Trailer_no_Info}{}
+\prop_gput:cnn
+  { g_@@_standard_pdf/A-4_prop }{only_pdfa_embed_content}{}
 \prop_gremove:cn
   { g_@@_standard_pdf/A-4_prop }{conformance}
 \prop_gremove:cn
   { g_@@_standard_pdf/A-4_prop }{max_pdf_version}
 \prop_gremove:cn
-  { g_@@_standard_pdf/A-4_prop }{Catalog_OCProperties_no_AS} 
+  { g_@@_standard_pdf/A-4_prop }{Catalog_OCProperties_no_AS}
 %A-4f ==============
 \prop_new:c { g_@@_standard_pdf/A-4F_prop }
 \prop_gset_eq:cc
@@ -1075,15 +1096,18 @@
   { g_@@_standard_pdf/A-4_prop }
 \prop_gput:cnn
   { g_@@_standard_pdf/A-4F_prop }{conformance}{F}
-% containsEmbeddedFiles == true ISO 19005-4:2020, Clause: 6.9, Test number: 5 
+% containsEmbeddedFiles == true ISO 19005-4:2020, Clause: 6.9, Test number: 5
 \prop_gput:cnn
-  { g_@@_standard_pdf/A-4F_prop }{Catalog_EmbeddedFiles}{}  
+  { g_@@_standard_pdf/A-4F_prop }{Catalog_EmbeddedFiles}{}
+% can contain any file
+\prop_gremove:cn
+  { g_@@_standard_pdf/A-4F_prop }{only_pdfa_embed_content}
 %    \end{macrocode}
 % \end{variable}
 %
 % \subsubsection{Embedded Files}
-% Standard 4-AF is needed if we add AF files for 
-% tagging but it also requires an EmbeddedFiles name tree, 
+% Standard 4-AF is needed if we add AF files for
+% tagging but it also requires an EmbeddedFiles name tree,
 % so we test at the end if the name tree is empty and add a small readme if
 % yes
 %    \begin{macrocode}
@@ -1092,23 +1116,78 @@
   \pdfmeta_standard_verify:nF{Catalog_EmbeddedFiles}
    {
     \tl_gput_right:Nn\g__kernel_pdfmanagement_end_run_code_tl
-     { 
+     {
        \bool_if:NT \g__pdfmanagement_active_bool
         {
          \pdfdict_if_empty:nT { g__pdf_Core/Catalog/Names/EmbeddedFiles }
           {
-            \group_begin: 
+            \group_begin:
             \pdfdict_put:nne {l_pdffile/Filespec} {Desc}{(note~about~PDF/A-4F)}
             \pdfdict_put:nnn { l_pdffile/Filespec }{AFRelationship} { /Unspecified }
-            \pdffile_embed_stream:nnN {PDF~standard~A-4F~requires~a~file}{readme.txt}\l_@@_tmpa_tl
-            \exp_args:Nne \__pdf_backend_Names_gpush:nn{EmbeddedFiles}{(readme)~\l_@@_tmpa_tl} 
+            \pdffile_embed_stream:nnN
+              {The~document~was~declared~to~be~of~type~PDF/A-4f~but~hasn't~any~attachments.~
+               LaTeX~therefore~added~this~dummy~file.}
+              {pdf-A4f.txt}
+              \l_@@_tmpa_tl
+            \exp_args:Nne \__pdf_backend_Names_gpush:nn{EmbeddedFiles}{(pdf-A4f)~\l_@@_tmpa_tl}
             \group_end:
           }
-       }  
+       }
      }
-   }   
-}    
+   }
+}
 %    \end{macrocode}
+% Before writing the xml we check if there are embedded files we know of. For A-4 we adjust
+% the standard to A-4F is needed.
+%    \begin{macrocode}
+\AddToHook{pdfmeta/xmp}
+ {
+    \pdfmeta_standard_verify:nF{no_embed_content}
+      {
+        \bool_lazy_or:nnT
+          { ! \int_if_zero_p:n { \g_pdffile_embed_pdfa_int } }
+          { ! \int_if_zero_p:n { \g_pdffile_embed_nonpdfa_int } }
+          {
+            \prop_get:NnNT\g_@@_standard_prop { name }\l_@@_tmpa_tl
+             {
+               \msg_warning:nne { pdf } { validation-failure }
+                 {
+                   Embedded~files~detected.\iow_newline:
+                   This~is~not~allowed~in~standard~\l_@@_tmpa_tl
+                 }
+             }
+          }
+      }
+    \pdfmeta_standard_verify:nF {only_pdfa_embed_content}
+      {
+        \int_if_zero:nF  { \g_pdffile_embed_nonpdfa_int }
+          {
+           \prop_get:NnNT\g_@@_standard_prop { name }\l_@@_tmpa_tl
+             {
+               \str_if_eq:VnTF {\l_@@_tmpa_tl} { pdf/A-4 }
+                {
+                  \prop_gset_eq:cc
+                    { g_@@_standard_prop }
+                    { g_@@_standard_pdf/A-4F_prop }
+                  \msg_warning:nne { pdf } { validation-failure }
+                   {
+                     Embedded~non-PDF~files~detected.\iow_newline:
+                     Switching~standard~from~PDF/A-4~to~PDF/A-4F
+                   }
+                }
+                {
+                  \msg_warning:nne { pdf } { validation-failure }
+                   {
+                     Embedded~non-PDF~files~detected.\iow_newline:
+                     This~is~not~allowed~in~standard~\l_@@_tmpa_tl
+                   }
+                }
+             }
+          }
+      }
+ }
+%    \end{macrocode}
+%
 % \subsubsection{Colorprofiles and Outputintents}
 % The following provides a minimum of interface to add a color profile
 % and an outputintent need for PDF/A for now. There will be need to extend it later,
@@ -1283,16 +1362,16 @@
         \prop_map_inline:Nn \g_@@_outputintents_prop
            {
              \prop_if_exist:cTF {c_@@_colorprofile_#2}
-               {  
+               {
                  \@@_embed_colorprofile:n
                   {#2}
                  \@@_write_outputintent:nn
                   {#2}
                   {#1}
-               } 
+               }
                {
                 \msg_warning:nnn{pdfmeta}{colorprofile-undefined}{#2}
-               }  
+               }
            }
       }
 %    \end{macrocode}
@@ -1318,7 +1397,7 @@
            { \pdfmeta_standard_item:n { outputintent_A } }
            \l_@@_tmpb_tl
          \prop_if_exist:cTF {c_@@_colorprofile_\l_@@_tmpb_tl}
-          {                  
+          {
             \exp_args:NV \@@_embed_colorprofile:n \l_@@_tmpb_tl
             \prop_map_inline:Nn \g_@@_outputintents_prop
               {
@@ -1330,7 +1409,7 @@
           }
           {
             \msg_warning:nne{pdfmeta}{colorprofile-undefined}{\l_@@_tmpb_tl}
-          }    
+          }
        }
    }
 %    \end{macrocode}
@@ -1386,15 +1465,15 @@
        {
          \pdf_version_compare:NnF < {2.0}
            {
-             \msg_warning:nneee 
+             \msg_warning:nneee
               {pdf}{wrong-pdfversion}
-              {\pdf_version:}{high}{UA-1}                  
-           }  
-       }          
+              {\pdf_version:}{high}{UA-1}
+           }
+       }
     },
 %    \end{macrocode}
 % currently it is not possible to merge requirements - these need some thoughts as
-% every standard has some common keys like the name or the yes. 
+% every standard has some common keys like the name or the yes.
 % We therefore add some requirements manually.
 %    \begin{macrocode}
    _pdfstandard / UA-2 .code:n =
@@ -1408,22 +1487,22 @@
          \@@_xmp_wtpdf_reuse_declaration:
          \pdf_version_compare:NnT < {2.0}
            {
-             \msg_warning:nneee 
+             \msg_warning:nneee
               {pdf}{wrong-pdfversion}
-              {\pdf_version:}{low}{UA-2}                  
-           }  
-       }        
-    },    
+              {\pdf_version:}{low}{UA-2}
+           }
+       }
+    },
    xmp  .choice:,
    xmp / true  .code:n = { \bool_gset_true:N \g_@@_xmp_bool },
    xmp / false .code:n = { \bool_gset_false:N \g_@@_xmp_bool},
    xmp .default:n = true,
 %    \end{macrocode}
-% These keys allow to disable or force the wtpdf declarations. 
+% These keys allow to disable or force the wtpdf declarations.
 % Currently the content can not be changed and once they have been disabled there
 % are gone. This will perhaps change.
 %    \begin{macrocode}
-   xmp / wtpdf .code:n = 
+   xmp / wtpdf .code:n =
     {
       \keys_set:nn {@@/xmp}{#1}
     },
@@ -1436,13 +1515,13 @@
     {
       \cs_set_eq:NN \@@_xmp_wtpdf_reuse_declaration: \prg_do_nothing:
     },
-   accessibility .choice:, 
-   accessibility / true .code:n = \@@_xmp_wtpdf_accessibility_declaration:, 
-   accessibility /false .code:n = 
+   accessibility .choice:,
+   accessibility / true .code:n = \@@_xmp_wtpdf_accessibility_declaration:,
+   accessibility /false .code:n =
     {
       \cs_set_eq:NN \@@_xmp_wtpdf_accessibility_declaration: \prg_do_nothing:
-    },  
-  } 
+    },
+  }
 %    \end{macrocode}
 % XMP debugging option
 %    \begin{macrocode}
@@ -1900,7 +1979,7 @@
                 {
                   \@@_xmp_add_packet_line_attr:nneV
                    {rdf}{li}{xml:lang="\l_@@_tmpa_tl" }\l_@@_tmpb_tl
-                }  
+                }
             }
          \@@_xmp_add_packet_close:nn{rdf}{#3}
         \@@_xmp_add_packet_close:nn {#1}{#2}
@@ -2088,13 +2167,13 @@
             \cs_if_exist_use:c {@@_xmp_schema_#2_additions:}
             \@@_xmp_add_packet_close:nn{rdf}{li}
           }
-      } 
+      }
   }
 %    \end{macrocode}
 % \end{macro}
-% 
 %
 %
+%
 % \begin{macro}{\@@_xmp_property_new:nnnnn}
 %  This adds a property to a schema.
 %    \begin{macrocode}
@@ -2161,7 +2240,7 @@
 %  Renditionclass declared by hyperxmp.
 %  Properties InstanceID and OriginalDocumentID declared by pdfx (pdfx.xmp)
 %  With the exception of OriginalDocumentID all are already allowed and
-%  predefined. 
+%  predefined.
 %    \begin{macrocode}
 \@@_xmp_schema_new:nnn
    {XMP~Media~Management~Schema}
@@ -2194,10 +2273,10 @@
    {rev}
    {Integer}
    {internal}
-   {Revision~year~of~standard}   
+   {Revision~year~of~standard}
 %    \end{macrocode}
 % \end{macro}
-%  \item[pdfuaid] here we need (?) to declare the property 
+%  \item[pdfuaid] here we need (?) to declare the property
 %  \enquote{part} and \enquote{rev}.
 % \begin{macro}[no-user-doc]{pdfuaid~(schema)}
 %    \begin{macrocode}
@@ -2216,7 +2295,7 @@
    {rev}
    {Integer}
    {internal}
-   {Revision~of~ISO~14289~standard}   
+   {Revision~of~ISO~14289~standard}
 %    \end{macrocode}
 % \end{macro}
 % \item[pdfx] According to [1] not an allowed schema, but it seems
@@ -2391,22 +2470,22 @@
 %    \end{macrocode}
 % \end{macro}
 % \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 
+%
+% \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 compliance) 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:nn {pdfd}{http://pdfa.org/declarations/} 
+  \@@_xmp_xmlns_new:nn {pdfd}{http://pdfa.org/declarations/}
   \@@_xmp_schema_new:nnn
     {PDF~Declarations~Schema}
     {pdfd}
@@ -2416,7 +2495,7 @@
     {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.}  
+    {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}
@@ -2459,14 +2538,14 @@
                 {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}{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: 
+   \cs_gset_eq:NN \@@_xmp_schema_enable_pdfd: \prg_do_nothing:
  }
 %    \end{macrocode}
 %
@@ -2564,19 +2643,19 @@
   {
     \@@_xmp_add_packet_line:nne {pdfaid}{part}{\pdfmeta_standard_item:n{level}}
     \@@_xmp_add_packet_line:nne
-      {pdfaid}{conformance}{\pdfmeta_standard_item:n{conformance}}  
-    \int_compare:nNnTF {0\pdfmeta_standard_item:n{level}}<{4}  
+      {pdfaid}{conformance}{\pdfmeta_standard_item:n{conformance}}
+    \int_compare:nNnTF {0\pdfmeta_standard_item:n{level}}<{4}
      {\@@_xmp_add_packet_line:nne {pdfaid}{year} {\pdfmeta_standard_item:n{year}}}
      {\@@_xmp_add_packet_line:nne {pdfaid}{rev}  {\pdfmeta_standard_item:n{year}}}
     \@@_xmp_add_packet_line:nne
       {pdfxid}{GTS_PDFXVersion}{\GetDocumentProperties{document/pdfstandard-X}}
-    \pdfmanagement_get_documentproperties:nNT {document/pdfstandard-UA}\l_@@_tmpa_tl  
-     { 
+    \pdfmanagement_get_documentproperties:nNT {document/pdfstandard-UA}\l_@@_tmpa_tl
+     {
        \@@_xmp_add_packet_line:nne
-        {pdfuaid}{part}{\exp_last_unbraced:No\use_i:nn \l_@@_tmpa_tl}          
+        {pdfuaid}{part}{\exp_last_unbraced:No\use_i:nn \l_@@_tmpa_tl}
       \@@_xmp_add_packet_line:nne
-        {pdfuaid}{rev}{\exp_last_unbraced:No\use_ii:nn \l_@@_tmpa_tl}            
-     } 
+        {pdfuaid}{rev}{\exp_last_unbraced:No\use_ii:nn \l_@@_tmpa_tl}
+     }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -2583,7 +2662,7 @@
 %
 % \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}
@@ -2598,11 +2677,11 @@
     \prop_if_empty:NF\g_@@_xmp_pdfd_data_prop
       {
         \@@_xmp_add_packet_open:nn{pdfd}{declarations}
-        \@@_xmp_add_packet_open:nn{rdf}{Bag}  
+        \@@_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}
       }
@@ -2616,20 +2695,20 @@
 \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}      
+      \@@_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}  
+         \@@_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}{Bag}
+         \@@_xmp_add_packet_close:nn{pdfd}{claimData}
        }
-    \@@_xmp_add_packet_close:nn{rdf}{li}   
- }  
+    \@@_xmp_add_packet_close:nn{rdf}{li}
+ }
 %    \end{macrocode}
 % \end{macro}
-% 
+%
 % \subsection{Photoshop}
 % \begin{macro}{\@@_xmp_build_photoshop:}
 %    \begin{macrocode}
@@ -2808,11 +2887,11 @@
       {Marked}
       {
        \str_case:en {\GetDocumentProperties{document/copyright}}
-        { 
+        {
           {true}{True}
           {false}{False}
         }
-      }      
+      }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -2982,12 +3061,13 @@
 % We don't try to get the byte count. So we can put everything
 % in the |shipout/lastpage| hook
 %    \begin{macrocode}
+\hook_new:n { pdfmeta/xmp }
 \AddToHook{shipout/lastpage}
   {
     \bool_if:NT\g_@@_xmp_bool
      {
-       \str_if_exist:NTF\c_sys_timestamp_str 
-        {          
+       \str_if_exist:NTF\c_sys_timestamp_str
+        {
           \tl_set_eq:NN \l_@@_xmp_currentdate_tl \c_sys_timestamp_str
         }
         {
@@ -2994,6 +3074,7 @@
           \file_get_timestamp:nN{\jobname.log}\l_@@_xmp_currentdate_tl
         }
        \@@_xmp_date_split:VN\l_@@_xmp_currentdate_tl\l_@@_xmp_currentdate_seq
+       \hook_use:n { pdfmeta/xmp }
        \@@_xmp_build_packet:
        \exp_args:No
        \__pdf_backend_metadata_stream:n {\g_@@_xmp_packet_tl}
@@ -3036,13 +3117,13 @@
 \cs_set_eq:NN \pdfmeta_xmp_schema_new:nnn \@@_xmp_schema_new:nnn
 %    \end{macrocode}
 % \end{macro}
-% 
+%
 % \begin{macro}{\pdfmeta_xmp_property_new:nnnnn}
 %    \begin{macrocode}
 \cs_set_eq:NN \pdfmeta_xmp_property_new:nnnnn \@@_xmp_property_new:nnnnn
 %    \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
@@ -3062,12 +3143,12 @@
    \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}      
-     } 
+       \@@_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
@@ -3075,12 +3156,12 @@
    \prop_gput:Nno\g_@@_xmp_pdfd_data_prop{#1}
        {
          \l_@@_tmpa_tl
-       }        
+       }
  }
 \cs_generate_variant:Nn\pdfmeta_xmp_add_declaration:nnnnn {e,eee}
 %    \end{macrocode}
 % \end{macro}
-% 
+%
 % \subsection{Default declarations}
 % The two declarations will be required quite often with ua-2, so we
 % provide some interface.
@@ -3099,7 +3180,7 @@
       {http://pdfa.org/declarations/wtpdf\c_hash_str reuse1.0}
       {LaTeX~Project}
       {\@@_xmp_iso_today:}{}{}
- }     
+ }
 \cs_new_protected:Npn \@@_xmp_wtpdf_accessibility_declaration:
  {
    \pdfmeta_xmp_add_declaration:ennnn
@@ -3106,10 +3187,10 @@
      {http://pdfa.org/declarations/wtpdf\c_hash_str accessibility1.0}
      {LaTeX~Project}
      {\@@_xmp_iso_today:}{}{}
- }    
+ }
 %    \end{macrocode}
 % \end{macro}
-% 
+%
 %    \begin{macrocode}
 %</package>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdftools.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdftools.dtx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdftools.dtx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -49,7 +49,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.96n, released 2024-10-27}
+% \date{Version 0.96o, released 2024-12-20}
 %
 % \maketitle
 % \begin{documentation}
@@ -238,7 +238,7 @@
 %
 %    \begin{macrocode}
 %<*header>
-\ProvidesExplPackage{l3pdftools}{2024-10-27}{0.96n}
+\ProvidesExplPackage{l3pdftools}{2024-12-20}{0.96o}
   {candidate commands for l3pdf---LaTeX PDF management testphase bundle}
 %</header>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfxform.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfxform.dtx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfxform.dtx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -48,7 +48,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.96n, released 2024-10-27}
+% \date{Version 0.96o, released 2024-12-20}
 %
 % \maketitle
 % \begin{documentation}
@@ -132,7 +132,7 @@
 %    \begin{macrocode}
 %<@@=pdf>
 %<*header>
-\ProvidesExplPackage{l3pdfxform}{2024-10-27}{0.96n}
+\ProvidesExplPackage{l3pdfxform}{2024-12-20}{0.96o}
   {command to create xforms (beta)---LaTeX PDF management testphase bundle}
 %</header>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/ltdocinit.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/ltdocinit.dtx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/ltdocinit.dtx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -47,7 +47,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.96n, released 2024-10-27}
+% \date{Version 0.96o, released 2024-12-20}
 %
 % \maketitle
 % \begin{documentation}
@@ -55,7 +55,7 @@
 % \section{\pkg{ltdocinit} documentation}
 % This small module defined \cs{DocumentMetadata} but the definition  
 % has been moved to latex-lab. The documentation can be found in 
-% \texttt{documentmetadata-support-doc-.pdf}
+% \texttt{documentmetadata-support-doc.pdf}
 %
 % \cs{DocumentMetadata} is also used to
 % activate the new PDF management code and it loads
@@ -81,72 +81,20 @@
 % This is an older alias for \cs{DocumentMetadata}
 % \end{function}
 %
-% Additionally to the keys described in \texttt{documentmetadata-support-doc-.pdf}
+% Additionally to the keys described in \texttt{documentmetadata-support-doc.pdf}
 % the following keys/values are implemented
 %
 % \begin{description}
 %
-%    \item[\texttt{pdfstandard}] Choice key to set the pdf standard.
-%    
-%      Starting with version 0.95s it is also possible to use the values
-%      |X-4|, |X-4p|, |X-5g|, |X-5n|, |X-5pg|, |X-6|, |X-6n|, |X-6p|, |UA-1|, for
-%      a PDF/X and PDF/UA standard. These keys set \emph{only} the relevant
-%      XMP-metadata. In version 0.95z support for |UA-2| has been added but
-%      note that |UA-2| hasn't been released yet. It should be used only together
-%      with pdf version 2.0.
-%      
-%      Beside this |A-1b|, |A-2a|, |A-2b|, |A-2u|, |A-3a|, |A-3b|, |A-3u| and |A-4|
-%      are accepted as values for A-standards. The casing is irrelevant, |a-1b| works too.
-%      Note that using these
-%      key doesn't mean that the document actually follows the standard. \LaTeX{}
-%      can neither ensure nor check all requirements of a standard, and not everything
-%      it can do theoretically has already been implemented.
-%      For A-standard a color profile is included and the
-%      \texttt{/OutputIntent} is set and javascript action in hyperref are suppressed.
-%      The |u| variants do not force unicode,
-%      but they will pass the information to hyperref. The |a| variants
-%      do \emph{not} enforce (or even test) a tagged pdf yet.
-%      More information can be found in the documentation
-%      of \pkg{l3pdfmeta}.
-%
-%      |pdfstandard| can be used more than once to set overlapping standards, e.g:\\
-%      |pdfstandard=A-2b,pdfstandard=X-4,pdfstandard=UA-1|
-%
-%    \item[\texttt{xmp}] A boolean, if set to false no XMP metadata are added to the PDF.
-%    The default is true. Details are described in the documentation of \pkg{l3pdfmeta}.
-%
 %    \item[\texttt{testphase}] This key is used to load testphase code. The values it accepts
 %    and their effect will change over time, when testphase packages are added or
-%    removed or when the code is moved into the kernel. New value here are
+%    removed or when the code is moved into the kernel. A new value here is
 %     \begin{description}
-%    \item[\texttt{new-or-1}] This patches a few commands related
-%    to the output routing. They are needed for the tagging
-%    of paragraphs, for the tagging of header and footer and 
-%    to allow the PDF management to insert code which avoids that
-%    links happening at page breaks spills into the header and footer. 
-%    This code is also loaded be the following values.
-%    \item[\texttt{new-or}] This loads more changes to the output routine required for the 
-%    tagging. It is not compatible with every class! The code is also loaded by the 
-%    \texttt{phase-II} value.
+%      \item[latest] This loads all existing modules.
 %    \end{description}
+%    
 %    The |testphase| key can only be used in the first \cs{DocumentMetadata}.
 %
-%    \item[\texttt{debug}] This key activates some debug options. It takes a list of key-values
-%    as value. Currently the following keys are known:
-%     \begin{description}
-%     \item[\texttt{para}] with the default and only value |show|. It will activate the |paratagging-show|
-%       option of \pkg{tagpdf},
-%     \item[\texttt{log}]  with the values as described in the documentation \pkg{tagpdf},
-%     \item[\texttt{uncompress}] which does the same as |uncompress| as main key
-%     \item[\texttt{pdfmanagement}] a boolean which allows to deactivate the pdfmanagement.
-%     This should only be done for debugging! 
-%     \item[\texttt{firstaidoff}] This accepts a comma lists of keywords and disables the patches
-%       related to them. More information can be found in the documentation of
-%       \pkg{pdfmanagement-firstaid}.
-%     \item[\texttt{xmp-export}] This will export the XMP-metadata to a file \verb+\jobname.xmpi+.
-%     with \texttt{debug=\{xmp-export=filename\}} the file name can be changed. 
-%     More information can be found in the documentation of \pkg{l3pdfmeta}.  
-%    \end{description}
 % \end{description}
 %
 % \subsection{Container for document properties}
@@ -221,7 +169,7 @@
 %    \begin{macrocode}
 %<@@=pdfmanagement>
 %<*header>
-\ProvidesExplPackage{ltdocinit}{2024-10-27}{0.96n}
+\ProvidesExplPackage{ltdocinit}{2024-12-20}{0.96o}
   {Initialize document metadata}
 %</header>
 %    \end{macrocode}
@@ -246,6 +194,27 @@
  { \tl_new:N \g_@@_testphase_tl }
 %    \end{macrocode}
 % \end{variable}
+% \subsection{New, temporary testphase keys}
+% TODO: remove after 2025-06-01 release
+% 
+%    \begin{macrocode}
+\msg_new:nnn { meta } { testphase-latest-loading-temp }
+   {
+     Loading~testphase~modules\\
+     #1
+   }
+\keys_define:nn { document / metadata }
+  {
+    ,testphase / latest .code:n =
+     {
+       \keys_set:nn 
+        {document / metadata}
+        {testphase={phase-III,title,table,math,firstaid}}
+       \msg_note:nnn { meta } { testphase-latest-loading-temp } 
+        { phase-III,~title,~table,~math,~firstaid }
+     }           
+  }
+%    \end{macrocode}
 % \subsection{\cs{DeclareDocumentMetadata}}
 % \cs{DocumentMetadata} is defined by the kernel.
 % We only define the older alias \cs{DeclareDocumentMetadata}

Modified: trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/pdfmanagement-firstaid.dtx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/pdfmanagement-firstaid.dtx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -47,7 +47,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.96n, released 2024-10-27}
+% \date{Version 0.96o, released 2024-12-20}
 %
 % \maketitle
 % \begin{documentation}
@@ -63,7 +63,7 @@
 % |debug={firstaidoff={name1,name2,...},...}|.
 %    \begin{macrocode}
 %<*package>
-\ProvidesExplPackage{pdfmanagement-firstaid}{2024-10-27}{0.96n}
+\ProvidesExplPackage{pdfmanagement-firstaid}{2024-12-20}{0.96o}
   {LaTeX PDF management testphase bundle / firstaid-patches}
 
 %<@@=pdfmanagement>

Modified: trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/pdfmanagement-testphase.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/pdfmanagement-testphase.dtx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/source/latex/pdfmanagement-testphase/pdfmanagement-testphase.dtx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -47,7 +47,7 @@
 %    }^^A
 % }
 %
-% \date{Version 0.96n, released 2024-10-27}
+% \date{Version 0.96o, released 2024-12-20}
 %
 % \maketitle
 % \begin{documentation}
@@ -394,7 +394,7 @@
 %    \begin{macrocode}
 %<@@=pdf>
 %<*package>
-\ProvidesExplPackage{pdfmanagement-testphase}{2024-10-27}{0.96n}
+\ProvidesExplPackage{pdfmanagement-testphase}{2024-12-20}{0.96o}
   {LaTeX PDF management testphase bundle}
 \providecommand\IfFormatAtLeastTF{\@ifl at t@r\fmtversion}
 \IfFormatAtLeastTF{2020-10-01}{}{
@@ -422,7 +422,7 @@
 % to allow to set it in the document.
 %    \begin{macrocode}
 %<*header>
-\ProvidesExplFile{pdfmanagement-testphase.ltx}{2024-10-27}{0.96n}
+\ProvidesExplFile{pdfmanagement-testphase.ltx}{2024-12-20}{0.96o}
   {PDF~management~code~(testphase)}
 %    \end{macrocode}
 % We define a boolean for the new delayed shipout. This is temporary. At some

Modified: trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/color-ltx.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/color-ltx.sty	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/color-ltx.sty	2024-12-21 20:55:20 UTC (rev 73181)
@@ -24,7 +24,7 @@
 %% This file has the LPPL maintenance status "maintained".
 %%
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesPackage{color-ltx}[2024-10-27 v0.96n
+\ProvidesPackage{color-ltx}[2024-12-20 v0.96o
   Standard LaTeX Color (patched for l3color, part of pdfmanagement-testphase, original version 2022/01/06 v1.3d) (DPC)]
 \edef\Gin at codes{%
  \catcode`\noexpand\^^A\the\catcode`\^^A\relax

Modified: trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty	2024-12-21 20:55:20 UTC (rev 73181)
@@ -19,7 +19,7 @@
 %
 % for those people who are interested.
 \NeedsTeXFormat{LaTeX2e}[2020/10/01]
-\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2024-10-27}{0.96n}
+\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2024-12-20}{0.96o}
   {temporary patches for the colorspace package to test pdfresource management ... UF}
 
 

Modified: trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def	2024-12-21 20:55:20 UTC (rev 73181)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: hyperref-generic.dtx
-\ProvidesFile{hgeneric-testphase.def}[2024-10-27 v0.96n %
+\ProvidesFile{hgeneric-testphase.def}[2024-12-20 v0.96o %
   generic Hyperref driver for the LaTeX PDF management testphase bundle]
 
 \RequirePackage{etoolbox} %why?
@@ -526,6 +526,8 @@
       { Go~to~destination~#1  }
       { \l__hyp_text_enc_info_print_tl }
       \l__hyp_link_Contents_tl
+    \pdfannot_dict_put:nne {link/GoTo}{Contents}
+      {\l__hyp_link_Contents_tl}
   }
 \socket_new_plug:nnn {hyp/link/URI/Contents}{default}
   {
@@ -533,6 +535,8 @@
       { #1  }
       { \l__hyp_text_enc_info_print_tl }
       \l__hyp_link_Contents_tl
+    \pdfannot_dict_put:nne {link/URI}{Contents}
+      {\l__hyp_link_Contents_tl}
   }
 \socket_assign_plug:nn{hyp/link/GoTo/Contents}{default}
 \socket_assign_plug:nn{hyp/link/URI/Contents}{default}
@@ -726,8 +730,6 @@
             \group_begin:
             \tl_set:Nn \l_hyp_current_dest_name_tl {#2}
             \socket_use:nnn{hyp/link/GoTo/Contents}{#2}{#3}
-            \pdfannot_dict_put:nne {link/GoTo}{Contents}
-              {\l__hyp_link_Contents_tl}
             \hook_use:n {hyp/link/#1}
             \__hyp_link_goto_begin:nw {#2}#3\Hy at xspace@end
             \__hyp_link_goto_end:
@@ -751,6 +753,7 @@
             \Hy at VerboseLinkStart{#1}{#2}% only for debug
             \group_begin:
             \tl_set:Nn \l_hyp_current_dest_name_tl {#2}
+            \socket_use:nnn{hyp/link/GoTo/Contents}{#2}{}
             \hook_use:n {hyp/link/#1}
             \__hyp_link_goto_begin:nw {#2}
           }
@@ -798,7 +801,6 @@
                \pdfdict_put:nnn{l_hyp/annot/A/URI}{IsMap}{true}
               }
             \socket_use:nn{hyp/link/URI/Contents}{#2}
-            \pdfannot_dict_put:nne {link/URI}{Contents}{\l__hyp_link_Contents_tl}
             \cs_set_eq:NN \# \c_hash_str
             \cs_set_eq:NN \% \c_percent_str
             \Hy at safe@activestrue

Modified: trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvipdfmx.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvipdfmx.def	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvipdfmx.def	2024-12-21 20:55:20 UTC (rev 73181)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3backend-testphase.dtx
 \ProvidesExplFile
-  {l3backend-testphase-dvipdfmx.def}{2024-10-27}{}
+  {l3backend-testphase-dvipdfmx.def}{2024-12-20}{}
   {LaTeX~PDF~management~testphase~bundle~backend~support: dvipdfmx}
 \cs_generate_variant:Nn \__kernel_backend_literal:n { e }
 \cs_generate_variant:Nn \__pdf_backend:n { e }

Modified: trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvips.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvips.def	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvips.def	2024-12-21 20:55:20 UTC (rev 73181)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3backend-testphase.dtx
 \ProvidesExplFile
-  {l3backend-testphase-dvips.def}{2024-10-27}{}
+  {l3backend-testphase-dvips.def}{2024-12-20}{}
   {LaTeX~PDF~management~testphase~bundle~backend~support: dvips}
 \cs_generate_variant:Nn \__kernel_backend_postscript:n { e }
 \cs_generate_variant:Nn \__pdf_backend_pdfmark:n { e }

Modified: trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvisvgm.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvisvgm.def	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvisvgm.def	2024-12-21 20:55:20 UTC (rev 73181)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3backend-testphase.dtx
 \ProvidesExplFile
-  {l3backend-testphase-dvisvgm.def}{2024-10-27}{}
+  {l3backend-testphase-dvisvgm.def}{2024-12-20}{}
   {LaTeX~PDF~management~testphase~bundle~backend~support: dvisvgm}
 \bool_if:NT \l__pdfmanagement_delayed_shipout_bool
  {

Modified: trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-luatex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-luatex.def	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-luatex.def	2024-12-21 20:55:20 UTC (rev 73181)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3backend-testphase.dtx
 \ProvidesExplFile
-  {l3backend-testphase-luatex.def}{2024-10-27}{}
+  {l3backend-testphase-luatex.def}{2024-12-20}{}
   {LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (LuaTeX)}
 \cs_generate_variant:Nn \__kernel_backend_literal_page:n { e }
 \bool_if:NT \l__pdfmanagement_delayed_shipout_bool

Modified: trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-pdftex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-pdftex.def	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-pdftex.def	2024-12-21 20:55:20 UTC (rev 73181)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3backend-testphase.dtx
 \ProvidesExplFile
-  {l3backend-testphase-pdftex.def}{2024-10-27}{}
+  {l3backend-testphase-pdftex.def}{2024-12-20}{}
   {LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (pdfTeX)}
 \cs_generate_variant:Nn \__kernel_backend_literal_page:n { e }
 \bool_if:NT \l__pdfmanagement_delayed_shipout_bool

Modified: trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-xetex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-xetex.def	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-xetex.def	2024-12-21 20:55:20 UTC (rev 73181)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3backend-testphase.dtx
 \ProvidesExplFile
-  {l3backend-testphase-xetex.def}{2024-10-27}{}
+  {l3backend-testphase-xetex.def}{2024-12-20}{}
   {LaTeX~PDF~management~testphase~bundle~backend~support: XeTeX}
 \cs_generate_variant:Nn \__kernel_backend_literal:n { e }
 \cs_generate_variant:Nn \__pdf_backend:n { e }

Modified: trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3pdffield-testphase.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3pdffield-testphase.sty	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3pdffield-testphase.sty	2024-12-21 20:55:20 UTC (rev 73181)
@@ -27,7 +27,7 @@
 %% File: l3pdffield.dtx
 
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesExplPackage{l3pdffield-testphase}{2024-10-27}{0.96n}%
+\ProvidesExplPackage{l3pdffield-testphase}{2024-12-20}{0.96o}%
   {form fields}
 \csname HyField at NeedAppearancesfalse\endcsname % suppress NeedAppearances
 \str_new:N \l__pdffield_tmpa_str
@@ -1016,7 +1016,7 @@
       {
         \__pdffield_field:n { __pdffield/checkbox/#1 }
       }
-    \keys_set:nn {pdffield}{parent=__pdffield/checkbox/#1}
+    \keys_set:nn {pdffield}{parent={__pdffield/checkbox/#1}}
   }
 \cs_generate_variant:Nn \__pdffield_checkbox_field:n {V}
 \cs_new_protected:Npn \__pdffield_checkbox:n #1
@@ -1215,7 +1215,7 @@
          }
       }
       }
-    \keys_set:nn {pdffield}{parent=__pdffield/radio/#1}
+    \keys_set:nn {pdffield}{parent={__pdffield/radio/#1}}
   }
 \cs_generate_variant:Nn \__pdffield_radio_field:n {V}
 \cs_new_protected:Npn \__pdffield_radio:n #1
@@ -1359,7 +1359,7 @@
       {
         \__pdffield_field:n { __pdffield/textfield/#1 }
       }
-    \keys_set:nn {pdffield}{parent=__pdffield/textfield/#1}
+    \keys_set:nn {pdffield}{parent={__pdffield/textfield/#1}}
   }
 \cs_generate_variant:Nn \__pdffield_textfield_field:n {V}
 \cs_new_protected:Npn \__pdffield_textfield:n #1
@@ -1699,7 +1699,7 @@
       {
         \__pdffield_field:n { __pdffield/pushbutton/#1 }
       }
-    \keys_set:nn {pdffield}{parent=__pdffield/pushbutton/#1}
+    \keys_set:nn {pdffield}{parent={__pdffield/pushbutton/#1}}
   }
 \cs_generate_variant:Nn \__pdffield_pushbutton_field:n {V}
 \cs_new_protected:Npn \__pdffield_pushbutton:n #1
@@ -1809,7 +1809,7 @@
           }
         \__pdffield_field:n { __pdffield/choice/#1 }
       }
-    \keys_set:nn {pdffield}{parent=__pdffield/choice/#1}
+    \keys_set:nn {pdffield}{parent={__pdffield/choice/#1}}
   }
 \cs_generate_variant:Nn \__pdffield_choice_field:n {V}
 \cs_new_protected:Npn \__pdffield_choice:n #1

Modified: trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-firstaid.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-firstaid.sty	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-firstaid.sty	2024-12-21 20:55:20 UTC (rev 73181)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: pdfmanagement-firstaid.dtx
-\ProvidesExplPackage{pdfmanagement-firstaid}{2024-10-27}{0.96n}
+\ProvidesExplPackage{pdfmanagement-firstaid}{2024-12-20}{0.96o}
   {LaTeX PDF management testphase bundle / firstaid-patches}
 
 \clist_map_inline:nn

Modified: trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx	2024-12-21 20:55:20 UTC (rev 73181)
@@ -27,7 +27,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: pdfmanagement-testphase.dtx
-\ProvidesExplFile{pdfmanagement-testphase.ltx}{2024-10-27}{0.96n}
+\ProvidesExplFile{pdfmanagement-testphase.ltx}{2024-12-20}{0.96o}
   {PDF~management~code~(testphase)}
 \bool_new:N\l__pdfmanagement_delayed_shipout_bool
 \msg_new:nnn {pdfmanagement}{delayed-shipout}
@@ -1038,6 +1038,22 @@
   { \clist_new:N \g__pdfmanagement_firstaidoff_clist }
 \tl_if_exist:NF \g__pdfmanagement_testphase_tl
  { \tl_new:N \g__pdfmanagement_testphase_tl }
+\msg_new:nnn { meta } { testphase-latest-loading-temp }
+   {
+     Loading~testphase~modules\\
+     #1
+   }
+\keys_define:nn { document / metadata }
+  {
+    ,testphase / latest .code:n =
+     {
+       \keys_set:nn
+        {document / metadata}
+        {testphase={phase-III,title,table,math,firstaid}}
+       \msg_note:nnn { meta } { testphase-latest-loading-temp }
+        { phase-III,~title,~table,~math,~firstaid }
+     }
+  }
 \NewCommandCopy\DeclareDocumentMetadata\DocumentMetadata
 \prop_new:N \g__pdfmanagement_documentproperties_prop %
 \NewDocumentCommand\AddToDocumentProperties{O{\@currname}mm}
@@ -1324,6 +1340,11 @@
 \msg_new:nnn  {pdf }{unknown-standard}{The~standard~'#1'~is~unknown~and~has~been~ignored}
 \msg_new:nnn  {pdf }{wrong-pdfversion}
   {PDF~version~#1~is~too~#2~for~standard~'#3'.}
+\msg_new:nnn  {pdf }{validation-failure}
+  {
+    PDF~standard~validation~failure.\\
+    #1
+  }
 \tl_new:N  \l__pdfmeta_tmpa_tl
 \tl_new:N  \l__pdfmeta_tmpb_tl
 \str_new:N \l__pdfmeta_tmpa_str
@@ -1518,8 +1539,12 @@
   { g__pdfmeta_standard_pdf/A-2B_prop }{level}{2}
 \prop_gremove:cn
   { g__pdfmeta_standard_pdf/A-2B_prop }
-  { embed_content}
+  { no_embed_content }
 \prop_gput:cnn
+  { g__pdfmeta_standard_pdf/A-2B_prop }
+  { only_pdfa_embed_content }
+  {}
+\prop_gput:cnn
   { g__pdfmeta_standard_pdf/A-2B_prop }{max_pdf_version}{1.7}
 \prop_gput:cnn
   { g__pdfmeta_standard_pdf/A-2B_prop }{omit_CID}{}
@@ -1562,7 +1587,7 @@
   { g__pdfmeta_standard_pdf/A-3B_prop }{level}{3}
 \prop_gremove:cn
   { g__pdfmeta_standard_pdf/A-3B_prop }
-  { embed_content}
+  { only_pdfa_embed_content }
 \prop_new:c { g__pdfmeta_standard_pdf/A-3U_prop }
 \prop_gset_eq:cc
   { g__pdfmeta_standard_pdf/A-3U_prop }
@@ -1601,6 +1626,8 @@
   { g__pdfmeta_standard_pdf/A-4_prop }{no_CharSet}{}
 \prop_gput:cnn
   { g__pdfmeta_standard_pdf/A-4_prop }{Trailer_no_Info}{}
+\prop_gput:cnn
+  { g__pdfmeta_standard_pdf/A-4_prop }{only_pdfa_embed_content}{}
 \prop_gremove:cn
   { g__pdfmeta_standard_pdf/A-4_prop }{conformance}
 \prop_gremove:cn
@@ -1615,6 +1642,8 @@
   { g__pdfmeta_standard_pdf/A-4F_prop }{conformance}{F}
 \prop_gput:cnn
   { g__pdfmeta_standard_pdf/A-4F_prop }{Catalog_EmbeddedFiles}{}
+\prop_gremove:cn
+  { g__pdfmeta_standard_pdf/A-4F_prop }{only_pdfa_embed_content}
 \AddToHook{begindocument/end}
 {
   \pdfmeta_standard_verify:nF{Catalog_EmbeddedFiles}
@@ -1628,8 +1657,12 @@
             \group_begin:
             \pdfdict_put:nne {l_pdffile/Filespec} {Desc}{(note~about~PDF/A-4F)}
             \pdfdict_put:nnn { l_pdffile/Filespec }{AFRelationship} { /Unspecified }
-            \pdffile_embed_stream:nnN {PDF~standard~A-4F~requires~a~file}{readme.txt}\l__pdfmeta_tmpa_tl
-            \exp_args:Nne \__pdf_backend_Names_gpush:nn{EmbeddedFiles}{(readme)~\l__pdfmeta_tmpa_tl}
+            \pdffile_embed_stream:nnN
+              {The~document~was~declared~to~be~of~type~PDF/A-4f~but~hasn't~any~attachments.~
+               LaTeX~therefore~added~this~dummy~file.}
+              {pdf-A4f.txt}
+              \l__pdfmeta_tmpa_tl
+            \exp_args:Nne \__pdf_backend_Names_gpush:nn{EmbeddedFiles}{(pdf-A4f)~\l__pdfmeta_tmpa_tl}
             \group_end:
           }
        }
@@ -1636,6 +1669,52 @@
      }
    }
 }
+\AddToHook{pdfmeta/xmp}
+ {
+    \pdfmeta_standard_verify:nF{no_embed_content}
+      {
+        \bool_lazy_or:nnT
+          { ! \int_if_zero_p:n { \g_pdffile_embed_pdfa_int } }
+          { ! \int_if_zero_p:n { \g_pdffile_embed_nonpdfa_int } }
+          {
+            \prop_get:NnNT\g__pdfmeta_standard_prop { name }\l__pdfmeta_tmpa_tl
+             {
+               \msg_warning:nne { pdf } { validation-failure }
+                 {
+                   Embedded~files~detected.\iow_newline:
+                   This~is~not~allowed~in~standard~\l__pdfmeta_tmpa_tl
+                 }
+             }
+          }
+      }
+    \pdfmeta_standard_verify:nF {only_pdfa_embed_content}
+      {
+        \int_if_zero:nF  { \g_pdffile_embed_nonpdfa_int }
+          {
+           \prop_get:NnNT\g__pdfmeta_standard_prop { name }\l__pdfmeta_tmpa_tl
+             {
+               \str_if_eq:VnTF {\l__pdfmeta_tmpa_tl} { pdf/A-4 }
+                {
+                  \prop_gset_eq:cc
+                    { g__pdfmeta_standard_prop }
+                    { g__pdfmeta_standard_pdf/A-4F_prop }
+                  \msg_warning:nne { pdf } { validation-failure }
+                   {
+                     Embedded~non-PDF~files~detected.\iow_newline:
+                     Switching~standard~from~PDF/A-4~to~PDF/A-4F
+                   }
+                }
+                {
+                  \msg_warning:nne { pdf } { validation-failure }
+                   {
+                     Embedded~non-PDF~files~detected.\iow_newline:
+                     This~is~not~allowed~in~standard~\l__pdfmeta_tmpa_tl
+                   }
+                }
+             }
+          }
+      }
+ }
 \prop_new:N \g__pdfmeta_outputintents_prop
 \keys_define:nn { document / metadata }
   {
@@ -2828,6 +2907,7 @@
    \g__pdfmeta_xmp_user_packet_tl
    \int_set:Nn \l__pdfmeta_xmp_indent_int {3}
  }
+\hook_new:n { pdfmeta/xmp }
 \AddToHook{shipout/lastpage}
   {
     \bool_if:NT\g__pdfmeta_xmp_bool
@@ -2840,6 +2920,7 @@
           \file_get_timestamp:nN{\jobname.log}\l__pdfmeta_xmp_currentdate_tl
         }
        \__pdfmeta_xmp_date_split:VN\l__pdfmeta_xmp_currentdate_tl\l__pdfmeta_xmp_currentdate_seq
+       \hook_use:n { pdfmeta/xmp }
        \__pdfmeta_xmp_build_packet:
        \exp_args:No
        \__pdf_backend_metadata_stream:n {\g__pdfmeta_xmp_packet_tl}
@@ -3123,6 +3204,8 @@
     ,.sty = text/plain
     ,.xml = application/xml
   }
+\int_new:N\g_pdffile_embed_pdfa_int
+\int_new:N\g_pdffile_embed_nonpdfa_int
 \str_new:N  \l_pdffile_source_name_str
 \pdfdict_new:n { l_pdffile }
 \pdfdict_put:nnn { l_pdffile }{Type}{/EmbeddedFile}
@@ -3159,7 +3242,7 @@
        \prop_map_function:NN {\g_pdffile_embed_prop} \msg_show_item:nn
      }
   }
-\cs_new_protected:Npn \__pdffile_mimetype_set:nN #1 #2
+\cs_new_protected:Npn \__pdffile_mimetype_set:nNN #1 #2 #3
   {
     \file_parse_full_name:nNNN
           {#1}
@@ -3166,27 +3249,35 @@
           \l__pdffile_tmpa_str %unused
           \l__pdffile_tmpb_str %unused
           \l__pdffile_ext_str
-        %check if Subtype has been set
-        \pdfdict_get:nnN { l_pdffile}{Subtype}\l__pdffile_tmpa_tl
-        %if not look up in the prop:
-        \quark_if_no_value:NT \l__pdffile_tmpa_tl
+    %check if Subtype has been set
+    \pdfdict_get:nnN { l_pdffile}{Subtype}\l__pdffile_tmpa_tl
+    %if not look up in the prop:
+    \quark_if_no_value:NT \l__pdffile_tmpa_tl
+      {
+        \prop_get:NVNTF
+          \g_pdffile_mimetypes_prop
+          \l__pdffile_ext_str
+          \l__pdffile_tmpb_tl
           {
-            \prop_get:NVNTF
-              \g_pdffile_mimetypes_prop
-              \l__pdffile_ext_str
-              \l__pdffile_tmpb_tl
-              {
-                \tl_set:Ne #2 {/Subtype~\pdf_name_from_unicode_e:V \l__pdffile_tmpb_tl}
-              }
-              {
-                \msg_warning:nne { pdffile }{ mimetype-missing} {#1}
-                \tl_clear:N #2
-              }
+            \tl_set:Ne #2 {/Subtype~\pdf_name_from_unicode_e:V \l__pdffile_tmpb_tl}
           }
-    }
+          {
+            \msg_warning:nne { pdffile }{ mimetype-missing} {#1}
+            \tl_clear:N #2
+          }
+      }
+     \tl_set_eq:NN #3 \l__pdffile_ext_str
+   }
 
-\cs_generate_variant:Nn \__pdffile_mimetype_set:nN {VN}
+\cs_generate_variant:Nn \__pdffile_mimetype_set:nNN {VNN}
 
+\cs_new_protected:Npn \__pdffile_count_embed:N #1
+  {
+    \str_if_eq:VnTF #1 {.pdf}
+     {\int_gincr:N \g_pdffile_embed_pdfa_int }
+     {\int_gincr:N \g_pdffile_embed_nonpdfa_int }
+  }
+
 \cs_new_protected:Npn \__pdffile_fstream_write:nN #1 #2
   {
     \pdf_object_unnamed_write:ne { fstream }
@@ -3298,9 +3389,11 @@
           {
             \file_get_full_name:nNTF {#1} \l_pdffile_source_name_str
               {
-                \__pdffile_mimetype_set:VN
+                \__pdffile_mimetype_set:VNN
                   \l_pdffile_source_name_str
                   \l__pdffile_automimetype_tl
+                  \l__pdffile_tmpa_tl
+                \__pdffile_count_embed:N \l__pdffile_tmpa_tl
                 \__pdffile_fstream_write:VN
                   \l_pdffile_source_name_str
                   \l__pdffile_automimetype_tl
@@ -3358,8 +3451,9 @@
             { #3 }
             {{stream}{}{\tl_if_blank:nTF {#2}{stream.txt}{\exp_not:n{#2}}}}
          \tl_if_blank:nTF {#2}
-          { \__pdffile_mimetype_set:nN {stream.txt}\l__pdffile_automimetype_tl}
-          { \__pdffile_mimetype_set:nN { #2 } \l__pdffile_automimetype_tl }
+          { \__pdffile_mimetype_set:nNN {stream.txt}\l__pdffile_automimetype_tl \l__pdffile_tmpa_tl}
+          { \__pdffile_mimetype_set:nNN { #2 } \l__pdffile_automimetype_tl \l__pdffile_tmpa_tl }
+         \__pdffile_count_embed:N \l__pdffile_tmpa_tl
          \__pdffile_stream_write:nN
            { #1 }
            \l__pdffile_automimetype_tl
@@ -3377,8 +3471,9 @@
 \cs_new_protected:Npn \pdffile_embed_stream:nnN #1 #2 #3
   {
      \tl_if_blank:nTF {#2}
-      { \__pdffile_mimetype_set:nN {stream.txt}\l__pdffile_automimetype_tl}
-      { \__pdffile_mimetype_set:nN { #2 } \l__pdffile_automimetype_tl }
+      { \__pdffile_mimetype_set:nNN {stream.txt}\l__pdffile_automimetype_tl \l__pdffile_tmpa_tl}
+      { \__pdffile_mimetype_set:nNN { #2 } \l__pdffile_automimetype_tl \l__pdffile_tmpa_tl }
+     \__pdffile_count_embed:N\l__pdffile_tmpa_tl
      \__pdffile_stream_write:nN
        { #1 }
        \l__pdffile_automimetype_tl

Modified: trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.sty	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.sty	2024-12-21 20:55:20 UTC (rev 73181)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: pdfmanagement-testphase.dtx
-\ProvidesExplPackage{pdfmanagement-testphase}{2024-10-27}{0.96n}
+\ProvidesExplPackage{pdfmanagement-testphase}{2024-12-20}{0.96o}
   {LaTeX PDF management testphase bundle}
 \providecommand\IfFormatAtLeastTF{\@ifl at t@r\fmtversion}
 \IfFormatAtLeastTF{2020-10-01}{}{

Modified: trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty	2024-12-21 20:55:03 UTC (rev 73180)
+++ trunk/Master/texmf-dist/tex/latex/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty	2024-12-21 20:55:20 UTC (rev 73181)
@@ -1,6 +1,6 @@
 %% LaTeX2e file `xcolor-patches-tmp-ltx.sty'
 %%
-\ProvidesPackage{xcolor-patches-tmp-ltx}[2024-10-27 v0.96n patch xcolor for l3color]
+\ProvidesPackage{xcolor-patches-tmp-ltx}[2024-12-20 v0.96o patch xcolor for l3color]
 \@ifundefined{color_set:nn}{\RequirePackage{l3color}}{}
 
 \ExplSyntaxOn



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