From 20c6018246c73a328973845b3e80fd3f5fbf3812 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 9 Dec 2023 21:35:39 +0000 Subject: pdfmanagement-testphase (9dec23) git-svn-id: svn://tug.org/texlive/trunk@69078 c570f23f-e606-0410-a88d-b1316a301751 --- .../doc/latex/pdfmanagement-testphase/CHANGELOG.md | 15 + .../doc/latex/pdfmanagement-testphase/README.md | 2 +- .../pdfmanagement-testphase/hyperref-generic.pdf | Bin 961151 -> 967468 bytes .../l3backend-testphase.pdf | Bin 704199 -> 704238 bytes .../latex/pdfmanagement-testphase/l3pdfannot.pdf | Bin 606092 -> 606135 bytes .../latex/pdfmanagement-testphase/l3pdfdict.pdf | Bin 515694 -> 515546 bytes .../pdfmanagement-testphase/l3pdffield-action.pdf | Bin 559040 -> 558914 bytes .../l3pdffield-checkbox.pdf | Bin 542123 -> 542009 bytes .../pdfmanagement-testphase/l3pdffield-choice.pdf | Bin 544422 -> 544276 bytes .../l3pdffield-pushbutton.pdf | Bin 537538 -> 537399 bytes .../l3pdffield-radiobutton.pdf | Bin 594612 -> 594480 bytes .../l3pdffield-textfield.pdf | Bin 516740 -> 516613 bytes .../latex/pdfmanagement-testphase/l3pdffield.pdf | Bin 750981 -> 751043 bytes .../latex/pdfmanagement-testphase/l3pdffile.pdf | Bin 566955 -> 566778 bytes .../pdfmanagement-testphase/l3pdfmanagement.pdf | Bin 682850 -> 682685 bytes .../latex/pdfmanagement-testphase/l3pdfmeta.pdf | Bin 815060 -> 831131 bytes .../latex/pdfmanagement-testphase/l3pdftools.pdf | Bin 532095 -> 532070 bytes .../latex/pdfmanagement-testphase/l3pdfxform.pdf | Bin 427405 -> 427137 bytes .../latex/pdfmanagement-testphase/ltdocinit.pdf | Bin 587741 -> 587463 bytes .../pdfmanagement-firstaid.pdf | Bin 448754 -> 448729 bytes .../pdfmanagement-testphase.pdf | Bin 464434 -> 463665 bytes .../pdfmanagement-testphase/hyperref-generic.dtx | 500 ++++++++++++--------- .../l3backend-testphase.dtx | 14 +- .../latex/pdfmanagement-testphase/l3pdfannot.dtx | 7 +- .../latex/pdfmanagement-testphase/l3pdfdict.dtx | 4 +- .../pdfmanagement-testphase/l3pdffield-action.dtx | 2 +- .../l3pdffield-checkbox.dtx | 2 +- .../pdfmanagement-testphase/l3pdffield-choice.dtx | 2 +- .../l3pdffield-pushbutton.dtx | 2 +- .../l3pdffield-radiobutton.dtx | 2 +- .../l3pdffield-textfield.dtx | 2 +- .../latex/pdfmanagement-testphase/l3pdffield.dtx | 4 +- .../latex/pdfmanagement-testphase/l3pdffile.dtx | 4 +- .../pdfmanagement-testphase/l3pdfmanagement.dtx | 4 +- .../latex/pdfmanagement-testphase/l3pdfmeta.dtx | 228 +++++++++- .../latex/pdfmanagement-testphase/l3pdftools.dtx | 4 +- .../latex/pdfmanagement-testphase/l3pdfxform.dtx | 4 +- .../latex/pdfmanagement-testphase/ltdocinit.dtx | 4 +- .../pdfmanagement-firstaid.dtx | 4 +- .../pdfmanagement-testphase.dtx | 11 +- .../latex/pdfmanagement-testphase/color-ltx.sty | 2 +- .../colorspace-patches-tmp-ltx.sty | 2 +- .../pdfmanagement-testphase/hgeneric-testphase.def | 455 +++++++++++-------- .../l3backend-testphase-dvipdfmx.def | 2 +- .../l3backend-testphase-dvips.def | 2 +- .../l3backend-testphase-dvisvgm.def | 2 +- .../l3backend-testphase-luatex.def | 2 +- .../l3backend-testphase-pdftex.def | 2 +- .../l3backend-testphase-xetex.def | 2 +- .../l3pdffield-testphase.sty | 2 +- .../pdfmanagement-firstaid.sty | 2 +- .../pdfmanagement-testphase.ltx | 125 +++++- .../pdfmanagement-testphase.sty | 2 +- .../xcolor-patches-tmp-ltx.sty | 2 +- 54 files changed, 973 insertions(+), 452 deletions(-) diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/CHANGELOG.md b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/CHANGELOG.md index c3bc86cfc02..9076adab082 100644 --- a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/CHANGELOG.md +++ b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/CHANGELOG.md @@ -5,6 +5,21 @@ first release 0.95a, 2021-02-23 will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), this project uses date-based 'snapshot' version identifiers. +## [2023-11-17] +Version: 2023-12-09, 0.96d + +### Removed + + - l3bitset is now provided by l3kernel. + +### Added + - 2023-11-20: l3pdfmeta.dtx: support for PDF declarations in XMP metadata, issue #58 + - hyperref-generic.dtx: option nested-links key to suppress nested links. + +### Changed + - key family in hyperref-generic is now hyp and not hyp/setup + - do not use pdfuaid:rev with pdf/UA-1 + ## [2023-11-17] Version: 2023-11-17, 0.96c diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/README.md b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/README.md index 94a0136f3d9..e0b527353f3 100644 --- a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/README.md +++ b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/README.md @@ -1,6 +1,6 @@ # LaTeX PDF management testphase bundle -Version: 0.96c, 2023-11-17 +Version: 0.96d, 2023-12-09 This package is used during a test phase to load the new PDF management code of LaTeX. diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/hyperref-generic.pdf b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/hyperref-generic.pdf index 9318d060f93..f5d853b7e45 100644 Binary files a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/hyperref-generic.pdf and b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/hyperref-generic.pdf differ diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3backend-testphase.pdf b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3backend-testphase.pdf index 3c292b8dfa0..da622208553 100644 Binary files a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3backend-testphase.pdf and b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3backend-testphase.pdf differ diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfannot.pdf b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfannot.pdf index 8db999acd8d..a3b40dbcd2f 100644 Binary files a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfannot.pdf and b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfannot.pdf differ diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfdict.pdf b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfdict.pdf index c488bc77bfa..ae30760b1b1 100644 Binary files a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfdict.pdf and b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfdict.pdf differ diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-action.pdf b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-action.pdf index 1ad47b14fbf..1d2dfa5a9af 100644 Binary files a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-action.pdf and b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-action.pdf differ diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-checkbox.pdf b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-checkbox.pdf index e0f6b1fc9a2..5daeeaf1182 100644 Binary files a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-checkbox.pdf and b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-checkbox.pdf differ diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-choice.pdf b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-choice.pdf index 80cb55d643c..1ab858899cb 100644 Binary files a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-choice.pdf and b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-choice.pdf differ diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-pushbutton.pdf b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-pushbutton.pdf index c9b9cd1aef3..b455ede38e3 100644 Binary files a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-pushbutton.pdf and b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-pushbutton.pdf differ diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-radiobutton.pdf b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-radiobutton.pdf index b66ff7f3cb0..bfe906ca9d3 100644 Binary files a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-radiobutton.pdf and b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-radiobutton.pdf differ diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-textfield.pdf b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-textfield.pdf index 3d40a66eeec..428b07121cf 100644 Binary files a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-textfield.pdf and b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield-textfield.pdf differ diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield.pdf b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield.pdf index e4171c07e00..8a91d851180 100644 Binary files a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield.pdf and b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffield.pdf differ diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffile.pdf b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffile.pdf index cc338aff79f..35940f20fd6 100644 Binary files a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffile.pdf and b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffile.pdf differ diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfmanagement.pdf b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfmanagement.pdf index 9ddc2d15a74..4e704567e9b 100644 Binary files a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfmanagement.pdf and b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfmanagement.pdf differ diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfmeta.pdf b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfmeta.pdf index ccbfc2789eb..6f94039cd06 100644 Binary files a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfmeta.pdf and b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfmeta.pdf differ diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdftools.pdf b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdftools.pdf index 6711cd498c2..e10591432ed 100644 Binary files a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdftools.pdf and b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdftools.pdf differ diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfxform.pdf b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfxform.pdf index b013fc980d6..7b901ddda0c 100644 Binary files a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfxform.pdf and b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfxform.pdf differ diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/ltdocinit.pdf b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/ltdocinit.pdf index d8c5ab0934e..32df59ad2ef 100644 Binary files a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/ltdocinit.pdf and b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/ltdocinit.pdf differ diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-firstaid.pdf b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-firstaid.pdf index 5b95298b426..fc3bd4ce8a6 100644 Binary files a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-firstaid.pdf and b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-firstaid.pdf differ diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-testphase.pdf b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-testphase.pdf index 041de89f5ec..5f9f2f81e56 100644 Binary files a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-testphase.pdf and b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-testphase.pdf differ diff --git a/Master/texmf-dist/source/latex/pdfmanagement-testphase/hyperref-generic.dtx b/Master/texmf-dist/source/latex/pdfmanagement-testphase/hyperref-generic.dtx index c03d57a7fc4..03b931f11d3 100644 --- a/Master/texmf-dist/source/latex/pdfmanagement-testphase/hyperref-generic.dtx +++ b/Master/texmf-dist/source/latex/pdfmanagement-testphase/hyperref-generic.dtx @@ -82,7 +82,7 @@ % }^^A % } % -% \date{Version 0.96c, released 2023-11-17} +% \date{Version 0.96d, released 2023-12-09} % % \maketitle % \begin{documentation} @@ -615,7 +615,15 @@ % the link type, so the link is for example no longer colored. It also removes the % implicit grouping of the content. % -% +% \DescribeHypkey{nested-links}% +% +% Links are sometimes nested. E.g. if a section heading contains a reference +% it can lead to nested links in the table of contents or if |\nameref| is used. +% That is not forbidden and normally work as expected: If the link area overlap +% normally the inner link is \enquote{on top} and chosen at a click. +% But it is not always actually wanted, so with the |nested-links| (a boolean key) +% it is possible to disable such nested links. +% % \section{Draftmode} % pdftex and other engines knows a % draftmode which can be set with |\pdfdraftmode=1| @@ -797,7 +805,7 @@ % %\section{Assorted key descriptions}\label{sec:keydesc} %The following gives a few details to some keys that are perhaps not -%completly described in the manual, or are a bit different in this driver. +%completely described in the manual, or are a bit different in this driver. %The list is alphabetic. % % \DescribeHypkey{bookmarkstype} This key takes as value the extension of a list @@ -956,7 +964,7 @@ %<@@=hyp> % \end{macrocode} % \begin{macrocode} -\ProvidesFile{hgeneric-testphase.def}[2023-11-17 v0.96c % +\ProvidesFile{hgeneric-testphase.def}[2023-12-09 v0.96d % generic Hyperref driver for the LaTeX PDF management testphase bundle] \RequirePackage{etoolbox} %why? @@ -1221,15 +1229,15 @@ \cs_set_protected:Npn \hypersetup #1 { %\kvsetkeys{Hyp} {#1} - \keys_set:nn { hyp / setup }{ #1 } + \keys_set:nn { hyp }{ #1 } } % TODO for now unknown keys should only give warnings. -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { unknown .code:n = { \msg_warning:nneee { hyp } { unknown-key } - { hyp~/~setup }{ \l_keys_key_str } { #1 } + { hyp }{ \l_keys_key_str } { #1 } } } % \end{macrocode} @@ -1238,7 +1246,7 @@ % chapters and sections and with \cs{phantomsection}. The following key allows % to force a specific name for the destination so that it can be used by bookmarks. % \begin{macrocode} -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { next-anchor .code:n = { @@ -1274,7 +1282,7 @@ ,destination .tl_set:N = \l_@@_href_pdf_destination_tl ,pdfremotestartview .code:n = { - \keys_set:nn { hyp / setup } + \keys_set:nn { hyp } { pdfremotestartview = #1 } } ,page .code:n = @@ -1293,7 +1301,7 @@ { \pdfdict_put:nnn{l_hyp/annot/A}{Next}{#1} \tl_set:Nn \Hy@href@nextactionraw {/Next~#1} - \keys_set:nn {hyp / setup }{ pdfnewwindow = true} + \keys_set:nn {hyp }{ pdfnewwindow = true} } } ,afrelationship .code:n = @@ -1304,7 +1312,7 @@ } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,href / urlencode .bool_set:N = \l_@@_href_url_encode_bool ,href / urlencode .default:n = {true} @@ -1467,7 +1475,7 @@ \hook_new:n{hyp/link/cite} %\color_set:nnn {hyp/color/cite}{HTML}{2E7E2A} %\color_set:nn {hyp/color/citeborder}{hyp/color/cite!60!white} -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,citecolor .code:n = {\@@_color_set:ne {hyp/color/cite}{#1}\@@_citecolor_hook_init:} ,citebordercolor @@ -1477,7 +1485,7 @@ { \hook_gput_code:nnn { hyp/link/cite }{hyp/cite} { - \keys_set:nn { hyp / setup } + \keys_set:nn { hyp } { linkcolor = hyp/color/cite } @@ -1488,7 +1496,7 @@ { \hook_gput_code:nnn { hyp/link/cite }{hyp/citeborder} { - \keys_set:nn { hyp / setup } + \keys_set:nn { hyp } { linkbordercolor = hyp/color/citeborder } @@ -1972,7 +1980,7 @@ } % \end{macrocode} % \end{macro} -% \section {Core Hyperref Commands} +% \section{Core Hyperref Commands} % Every \pkg{hyperref} has to define eight core command: % \begin{verbatim} % \hyper@anchor @@ -1987,7 +1995,46 @@ % % This driver defines for consistency also % |\hyper@linklaunch| for Launch and |\hyper@linknamed| for Named. +% +% \subsection{Link level} +% Links can be nested. Inner links need perhaps special handling, e.g. +% to deactivate the link, or to change the border, or in the case of +% tagging to add some additional structure to handle the parent-child rules. +% We therefore add a global counter which is increased at the begin of +% link and decreased at the end. +% \begin{macro}{g_@@_linknestlevel_int} +% \begin{macrocode} +\int_new:N \g_@@_linknestlevel_int +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\prg_new_conditional:Npnn \@@_if_outer_link: {TF} + { + \int_compare:nNnTF { \g_@@_linknestlevel_int } > {1} + { \prg_return_false: } + { \prg_return_true: } + } +% \end{macrocode} + +% \begin{macrocode} +\cs_new:Npn \@@_check_link_nesting:TF #1 #2 + { + \use_i:nn {#1}{#2} + } +% \end{macrocode} % +% \begin{macrocode} +\keys_define:nn { hyp } + { + nested-links .choice:, + nested-links / true .code:n = + { \cs_set_eq:NN \@@_check_link_nesting:TF \use_i:nn }, + nested-links / false .code:n = + { \cs_set_eq:NN \@@_check_link_nesting:TF \@@_if_outer_link:TF }, + nested-links .default:n = {true} + } +% \end{macrocode} % \subsection{ Anchors / destinations} % The first three commands are needed for \enquote{anchors}. At first % the internal commands to create a destination. It uses @@ -2157,27 +2204,41 @@ { \bool_if:NTF \l_@@_annot_GoTo_bool { - \Hy@VerboseLinkStart{#1}{#2} - \group_begin: - \tl_set:Nn \l_hyp_current_dest_name_tl {#2} - \hook_use:n {hyp/link/#1} - \@@_link_goto_begin:nw {#2}#3\Hy@xspace@end - \@@_link_goto_end: - \group_end: - \Hy@VerboseLinkStop + \int_gincr:N\g_@@_linknestlevel_int + \@@_check_link_nesting:TF + { + \Hy@VerboseLinkStart{#1}{#2} + \group_begin: + \tl_set:Nn \l_hyp_current_dest_name_tl {#2} + \hook_use:n {hyp/link/#1} + \@@_link_goto_begin:nw {#2}#3\Hy@xspace@end + \@@_link_goto_end: + \group_end: + \Hy@VerboseLinkStop + } + { + \group_begin: #3\group_end: + } + \int_gdecr:N\g_@@_linknestlevel_int } {{\let\protect\relax#3}} } - \cs_new_protected:Npn \hyper@linkstart #1 #2 %#1 context, #2=destination name { \bool_if:NT \l_@@_annot_GoTo_bool { - \Hy@VerboseLinkStart{#1}{#2}% only for debug - \group_begin: - \tl_set:Nn \l_hyp_current_dest_name_tl {#2} - \hook_use:n {hyp/link/#1} - \@@_link_goto_begin:nw {#2} + \int_gincr:N\g_@@_linknestlevel_int + \@@_check_link_nesting:TF + { + \Hy@VerboseLinkStart{#1}{#2}% only for debug + \group_begin: + \tl_set:Nn \l_hyp_current_dest_name_tl {#2} + \hook_use:n {hyp/link/#1} + \@@_link_goto_begin:nw {#2} + } + { + \group_begin: + } } } @@ -2185,9 +2246,16 @@ { \bool_if:NT \l_@@_annot_GoTo_bool { - \@@_link_goto_end: - \group_end: - \Hy@VerboseLinkStop + \@@_check_link_nesting:TF + { + \@@_link_goto_end: + \group_end: + \Hy@VerboseLinkStop + } + { + \group_end: + } + \int_gdecr:N\g_@@_linknestlevel_int } } % \end{macrocode} @@ -2203,31 +2271,39 @@ { \bool_if:NTF \l_@@_annot_URI_bool { - \group_begin: - \@@_text_pdfstring:eoN - { #2} - { \l_@@_text_enc_uri_print_tl } - \l_@@_uri_tmpa_tl - \pdfdict_put:nno{l_hyp/annot/A/URI}{URI}{\l_@@_uri_tmpa_tl} - \bool_if:NT \l_@@_href_url_ismap_bool - { - \pdfdict_put:nnn{l_hyp/annot/A/URI}{IsMap}{true} - } - \cs_set_eq:NN \# \c_hash_str - \cs_set_eq:NN \% \c_percent_str - \Hy@safe@activestrue - \mode_leave_vertical: - \pdfannot_dict_put:nne {link/URI}{A}{<<\pdfdict_use:n {l_hyp/annot/A/URI}>>} - \pdfannot_link:nen { URI } - { - } + \int_gincr:N\g_@@_linknestlevel_int + \@@_check_link_nesting:TF + { + \group_begin: + \@@_text_pdfstring:eoN + { #2} + { \l_@@_text_enc_uri_print_tl } + \l_@@_uri_tmpa_tl + \pdfdict_put:nno{l_hyp/annot/A/URI}{URI}{\l_@@_uri_tmpa_tl} + \bool_if:NT \l_@@_href_url_ismap_bool + { + \pdfdict_put:nnn{l_hyp/annot/A/URI}{IsMap}{true} + } + \cs_set_eq:NN \# \c_hash_str + \cs_set_eq:NN \% \c_percent_str + \Hy@safe@activestrue + \mode_leave_vertical: + \pdfannot_dict_put:nne {link/URI}{A}{<<\pdfdict_use:n {l_hyp/annot/A/URI}>>} + \pdfannot_link:nen { URI } + { + } + { + \let\protect\relax + #1 + \Hy@xspace@end + \Hy@VerboseLinkStop %where is the start?? + } + \group_end: + } { - \let\protect\relax - #1 - \Hy@xspace@end - \Hy@VerboseLinkStop %where is the start?? + \group_begin: #1 \group_end: } - \group_end: + \int_gdecr:N\g_@@_linknestlevel_int } {{\let\protect\relax#1}} } @@ -2244,57 +2320,65 @@ { \bool_if:NTF \l_@@_annot_GoToR_bool { - \group_begin: - \tl_set:Ne \l_@@_filename_tmpa_tl { \text_expand:n { #2 } } - \exp_args:Ne - \pdf_object_if_exist:nF { @@_file_\tl_to_str:N \l_@@_filename_tmpa_tl } - { - \pdfdict_put:nne { l_pdffile/Filespec}{Subtype}{\pdf_name_from_unicode_e:n {application/pdf}} - \pdffile_embed_file:noe - {} - {\l_@@_filename_tmpa_tl } - {@@_file_\tl_to_str:N \l_@@_filename_tmpa_tl } - } - \pdfdict_put:nne - {l_hyp/annot/A/GoToR} - {F} - {\pdf_object_ref:e {@@_file_\tl_to_str:N \l_@@_filename_tmpa_tl}} - \@@_text_pdfstring:nnN - { #3 } - { \l_@@_text_enc_dest_print_tl } - \l_@@_dest_name_tmpa_tl - \tl_if_blank:eTF {#3} + \int_gincr:N\g_@@_linknestlevel_int + \@@_check_link_nesting:TF { - \pdfdict_put:nne {l_hyp/annot/A/GoToR}{D} + \group_begin: + \tl_set:Ne \l_@@_filename_tmpa_tl { \text_expand:n { #2 } } + \exp_args:Ne + \pdf_object_if_exist:nF { @@_file_\tl_to_str:N \l_@@_filename_tmpa_tl } + { + \pdfdict_put:nne { l_pdffile/Filespec}{Subtype}{\pdf_name_from_unicode_e:n {application/pdf}} + \pdffile_embed_file:noe + {} + {\l_@@_filename_tmpa_tl } + {@@_file_\tl_to_str:N \l_@@_filename_tmpa_tl } + } + \pdfdict_put:nne + {l_hyp/annot/A/GoToR} + {F} + {\pdf_object_ref:e {@@_file_\tl_to_str:N \l_@@_filename_tmpa_tl}} + \@@_text_pdfstring:nnN + { #3 } + { \l_@@_text_enc_dest_print_tl } + \l_@@_dest_name_tmpa_tl + \tl_if_blank:eTF {#3} { - [ - \int_eval:n - { \int_max:nn {0}{ 0\l_@@_href_pdf_page_tl - 1 }} - /\l_@@_dest_pdfremotestartview_tl - ] + \pdfdict_put:nne {l_hyp/annot/A/GoToR}{D} + { + [ + \int_eval:n + { \int_max:nn {0}{ 0\l_@@_href_pdf_page_tl - 1 }} + /\l_@@_dest_pdfremotestartview_tl + ] + } } - } - { - \pdfdict_put:nno {l_hyp/annot/A/GoToR}{D}{\l_@@_dest_name_tmpa_tl} - } - \mode_leave_vertical: + { + \pdfdict_put:nno {l_hyp/annot/A/GoToR}{D}{\l_@@_dest_name_tmpa_tl} + } + \mode_leave_vertical: % \end{macrocode} % We use an extra object here, as ghostscript doesn't like the % object reference in the dict % \url{https://chat.stackexchange.com/transcript/message/57361080#57361080} % \begin{macrocode} - \pdf_object_unnamed_write:ne{dict}{\pdfdict_use:n {l_hyp/annot/A/GoToR}} - \pdfannot_dict_put:nne {link/GoToR}{A}{\pdf_object_ref_last:} - \pdfannot_link:nnn %expansion?? - { GoToR } - { - } + \pdf_object_unnamed_write:ne{dict}{\pdfdict_use:n {l_hyp/annot/A/GoToR}} + \pdfannot_dict_put:nne {link/GoToR}{A}{\pdf_object_ref_last:} + \pdfannot_link:nnn %expansion?? + { GoToR } + { + } + { + \let\protect\relax + #1\Hy@xspace@end + \Hy@VerboseLinkStop %where is the start?? + } + \group_end: + } { - \let\protect\relax - #1\Hy@xspace@end - \Hy@VerboseLinkStop %where is the start?? + \group_begin: #1 \group_end: } - \group_end: + \int_gdecr:N\g_@@_linknestlevel_int } {{\let\protect\relax#1}} } @@ -2312,47 +2396,53 @@ { \bool_if:NTF \l_@@_annot_Launch_bool { - \group_begin: - \@@_text_pdfstring:nnN - { #1 } - { \l_@@_text_enc_file_print_tl } - \l_@@_filename_tmpa_tl - \pdfdict_put:nno {l_hyp/annot/A/Launch}{F}{\l_@@_filename_tmpa_tl} - \@@_text_pdfstring:noN - { #3 } - { \l_@@_text_enc_para_print_tl } - \l_@@_para_tmpa_tl - \bool_if:nTF - { - \str_if_eq_p:Vn \l_@@_para_tmpa_tl {()} - || - \pdf_version_compare_p:Nn > {1.9} - } - { - \pdfdict_remove:nn {l_hyp/annot/A/Launch}{Win} - } - { - \pdfdict_put:nne - {l_hyp/annot/A/Launch} - {Win} - {<

>} - } - \mode_leave_vertical: - \pdfannot_dict_put:nne {link/Launch}{A}{<<\pdfdict_use:n {l_hyp/annot/A/Launch}>>} - \pdfannot_link:nen - { Launch } - { - % /A -% << -% \pdfdict_use:n {l_hyp/annot/A/Launch} -% >> - } - { - \let\protect\relax - #2\Hy@xspace@end - \Hy@VerboseLinkStop %where is the start?? - } - \group_end: + \int_gincr:N\g_@@_linknestlevel_int + \@@_check_link_nesting:TF + { + \group_begin: + \@@_text_pdfstring:nnN + { #1 } + { \l_@@_text_enc_file_print_tl } + \l_@@_filename_tmpa_tl + \pdfdict_put:nno {l_hyp/annot/A/Launch}{F}{\l_@@_filename_tmpa_tl} + \@@_text_pdfstring:noN + { #3 } + { \l_@@_text_enc_para_print_tl } + \l_@@_para_tmpa_tl + \bool_if:nTF + { + \str_if_eq_p:Vn \l_@@_para_tmpa_tl {()} + || + \pdf_version_compare_p:Nn > {1.9} + } + { + \pdfdict_remove:nn {l_hyp/annot/A/Launch}{Win} + } + { + \pdfdict_put:nne + {l_hyp/annot/A/Launch} + {Win} + {<

>} + } + \mode_leave_vertical: + \pdfannot_dict_put:nne {link/Launch}{A}{<<\pdfdict_use:n {l_hyp/annot/A/Launch}>>} + \pdfannot_link:nen + { Launch } + { + % /A + % << + % \pdfdict_use:n {l_hyp/annot/A/Launch} + % >> + } + { + \let\protect\relax + #2\Hy@xspace@end + \Hy@VerboseLinkStop %where is the start?? + } + \group_end: + } + { \group_begin: #2 \group_end: } + \int_gdecr:N\g_@@_linknestlevel_int } {{\let\protect\relax#2}} } @@ -2380,31 +2470,37 @@ { \bool_if:NTF \l_@@_annot_Named_bool { - \group_begin: - \pdfmeta_standard_verify:nnTF {named_actions}{#1} - { - \mode_leave_vertical: - \pdfdict_put:nne {l_hyp/annot/A/Named}{N} - {\pdf_name_from_unicode_e:n{#1}} - \pdfannot_dict_put:nne {link/Named}{A}{<<\pdfdict_use:n {l_hyp/annot/A/Named}>>} - \pdfannot_link:nnn { Named } + \int_gincr:N\g_@@_linknestlevel_int + \@@_check_link_nesting:TF + { + \group_begin: + \pdfmeta_standard_verify:nnTF {named_actions}{#1} { -% /A -% << -% \pdfdict_use:n { l_hyp/annot/A/Named } -% >> + \mode_leave_vertical: + \pdfdict_put:nne {l_hyp/annot/A/Named}{N} + {\pdf_name_from_unicode_e:n{#1}} + \pdfannot_dict_put:nne {link/Named}{A}{<<\pdfdict_use:n {l_hyp/annot/A/Named}>>} + \pdfannot_link:nnn { Named } + { + % /A + % << + % \pdfdict_use:n { l_hyp/annot/A/Named } + % >> + } + { + #2 + \Hy@xspace@end + \Hy@VerboseLinkStop + } } { + \msg_warning:nnn { hyp } { pdfa-no-named-action }{#1} #2 - \Hy@xspace@end - \Hy@VerboseLinkStop } - } - { - \msg_warning:nnn { hyp } { pdfa-no-named-action }{#1} - #2 - } - \group_end: + \group_end: + } + { \group_begin: #2 \group_end: } + \int_gdecr:N\g_@@_linknestlevel_int } {{\let\protect\relax#2}} } @@ -2517,7 +2613,7 @@ % \begin{hypkey}{colorlinks} % This key also resets the border and borderstyle. % \begin{macrocode} -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,colorlinks .meta:n = { @@ -2539,14 +2635,14 @@ % \begin{macrocode} \seq_map_inline:Nn \c_@@_annot_types_seq { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { ,color#1 .bool_set:c = { l_hyp_annot_color#1_bool } ,#1color .code:n = { \@@_color_set:ne {hyp/color/#1}{##1} } } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,allcolors .meta:n = { @@ -2568,7 +2664,7 @@ % or cmyk (unusual). This can be set with the |bordercolormodel| key: %\begin{hypkey}{bordercolormodel} % \begin{macrocode} -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,bordercolormodel .choices:nn = {rgb,cmyk} @@ -2580,7 +2676,7 @@ % \begin{macrocode} \prop_map_inline:Nn \c_@@_map_hyp_annot_prop { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { #1bordercolor .code:n = { @@ -2605,7 +2701,7 @@ } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,allbordercolors .meta:n = { @@ -2625,7 +2721,7 @@ % \begin{macrocode} \prop_map_inline:Nn \c_@@_map_hyp_annot_prop { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { #1border .code:n = { @@ -2644,7 +2740,7 @@ } } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,pdfborder .code:n = { @@ -2678,7 +2774,7 @@ % \begin{macrocode} \prop_map_inline:Nn \c_@@_map_hyp_annot_prop { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { #1borderstyle .code:n = { @@ -2697,7 +2793,7 @@ } } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,pdfborderstyle .code:n = { @@ -2850,7 +2946,7 @@ { \pdf_version_compare_p:Nn > {1.4} } { \str_if_eq_p:ee{\pdf_version_major:}{-1} } { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { ,_ocgcolorlinks .meta:n = { @@ -2864,7 +2960,7 @@ } } { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { ,_ocgcolorlinks .code:n = { @@ -2876,7 +2972,7 @@ } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,ocgcolorlinks .choice: ,ocgcolorlinks / true .meta:n = @@ -2899,13 +2995,13 @@ { \pdf_version_compare_p:Nn > {1.4} } { \str_if_eq_p:ee{\pdf_version_major:}{-1} } { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { ,ocgcolor#1 .bool_set:c = { l_hyp_annot_ocgcolor#1_bool } } } { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { ,ocgcolor#1 .code:n= { @@ -2925,7 +3021,7 @@ % \begin{macrocode} \prop_map_inline:Nn \c_@@_map_hyp_annot_prop { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { ,#1highlight .choices:nn = { /I, /N, /O, /P} @@ -2954,7 +3050,7 @@ } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,pdfhighlight .choices:nn = { /I, /N, /O, /P} @@ -2991,7 +3087,7 @@ % This key disable all appearance keys. The link themselves are still there. % \begin{hypkey}{hidelinks,hidelink,hideurl,hidefile,hiderun,hidemenu} % \begin{macrocode} -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { hidelinks .meta:n = { @@ -3004,7 +3100,7 @@ \seq_map_inline:Nn \c_@@_annot_types_seq { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { hide#1 .meta:n = { @@ -3021,20 +3117,20 @@ % This define the key for the color schemes and sets the default colors. % \begin{hypkey}{colorscheme} % \begin{macrocode} -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { colorscheme .code:n = { \prop_map_inline:cn { c_@@_colorscheme_#1_prop } { - \keys_set:nn { hyp /setup } + \keys_set:nn { hyp } { ##1 = ##2 } } } } -\keys_set:nn { hyp / setup } {colorscheme=phelype} +\keys_set:nn { hyp } {colorscheme=phelype} % \end{macrocode} % \end{hypkey} % @@ -3044,7 +3140,7 @@ % The following are ignored (with or without warnings) % \begin{hypkey}{unicode,pdfencoding,pdfversion} % \begin{macrocode} -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,unicode .code:n = {} ,pdfencoding .code:n = {} @@ -3062,12 +3158,12 @@ % % \begin{hypkey}{verbose,debug,draft,final} % \begin{macrocode} -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,verbose .legacy_if_set:n = {Hy@verbose} ,debug .legacy_if_set:n = {Hy@verbose} } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,draft .code:n = { @@ -3086,7 +3182,7 @@ % pageanchor,linktoc,linktocpage,plainpages,localanchorname, % linkfileprefix} % \begin{macrocode} -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,extension .tl_set:N = \XR@ext ,extension .initial:n= pdf @@ -3098,7 +3194,7 @@ ,plainpages .legacy_if_set:n = {Hy@plainpages} } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,linktoc .choices:nn = { none, section, all, page } { @@ -3124,7 +3220,7 @@ % \begin{macrocode} \prop_map_inline:Nn \c_@@_map_hyp_annot_prop { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { ,#1 .bool_set:c = {l_@@_annot_#2_bool} } @@ -3133,7 +3229,7 @@ % \end{hypkey} % % \begin{macrocode} -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,baseurl .code:n = { @@ -3691,7 +3787,7 @@ % \begin{hypkey}{pdfview} % Destination keys. pdfview is a bit more complicated so extra. % \begin{macrocode} -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,pdfview .code:n = { @@ -3781,7 +3877,7 @@ % \begin{hypkey}{pdflang} % |pdflang| should be deprecated. % \begin{macrocode} -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,pdflang .code:n = { @@ -3807,7 +3903,7 @@ \regex_set:Nn\l_@@_optlang_regex {\A\[([A-Za-z\-]+)\](.*)} \cs_new_protected:Npn \@@_setup_info_key:nn #1 #2 { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { pdf#1 .code:n = { @@ -3894,7 +3990,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_setup_info_date_key:nn #1 #2 { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { pdf#1 .code:n = { @@ -3927,7 +4023,7 @@ \@@_setup_info_date_key:nn {creationdate} {CreationDate} \@@_setup_info_date_key:nn {moddate} {ModDate} -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { pdfmetadate .code:n = { \@@_store_metadata:nn {pdfmetadate}{#1} } } @@ -3936,12 +4032,12 @@ % \begin{hypkey}{pdftrapped} % Trapped is a bit curious, it has an value "unknown", and one can't suppress it ... % \begin{macrocode} -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,pdftrapped .code:n = { \exp_args:Nne - \keys_set:nn { hyp / setup } { _pdftrapped = \str_uppercase:n { #1 } } + \keys_set:nn { hyp } { _pdftrapped = \str_uppercase:n { #1 } } } ,_pdftrapped .choices:nn = {TRUE,FALSE,UNKNOWN} { @@ -3969,7 +4065,7 @@ % \begin{hypkey}{pdfinfo} % pdfinfo allows to set the info keys with keyval ... % \begin{macrocode} -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { pdfinfo .code:n = { @@ -3980,10 +4076,10 @@ % \end{hypkey} % Now we set some default values % \begin{macrocode} -\keys_set:nn { hyp / setup} {pdfcreator = LaTeX~with~hyperref} -\keys_set:nn { hyp / setup} {pdfauthor = } -\keys_set:nn { hyp / setup} {pdftitle = } -\keys_set:nn { hyp / setup} {pdfsubject = } +\keys_set:nn { hyp} {pdfcreator = LaTeX~with~hyperref} +\keys_set:nn { hyp} {pdfauthor = } +\keys_set:nn { hyp} {pdftitle = } +\keys_set:nn { hyp} {pdfsubject = } % \end{macrocode} % % \subsection{hyperxmp keys} @@ -4032,7 +4128,7 @@ ,pdfdate } { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { #1 .code:n= { \@@_store_metadata:nn {#1}{##1}} } @@ -4043,7 +4139,7 @@ % \subsection{Transitions} % pdfpageduration sets the duration a page is shown in full screen mode. % \begin{macrocode} -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { pdfpageduration .code:n = { @@ -4088,7 +4184,7 @@ % opaque & true or false, only relevant for Fly style % \end{tabular} % \begin{macrocode} -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { pdfpagetransition .code:n = { @@ -4180,7 +4276,7 @@ % % Finally we process the package option list, to get most keys working % \begin{macrocode} -\keys_set_known:nv{hyp/setup}{opt@hyperref.sty} +\keys_set_known:nv{ hyp }{opt@hyperref.sty} % \end{macrocode} % % Unfinished diff --git a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3backend-testphase.dtx b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3backend-testphase.dtx index 37e47d5c91b..03e50367f20 100644 --- a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3backend-testphase.dtx +++ b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3backend-testphase.dtx @@ -45,7 +45,7 @@ % }^^A % } % -% \date{Version 0.96c, released 2023-11-17} +% \date{Version 0.96d, released 2023-12-09} % % \maketitle % @@ -56,27 +56,27 @@ % \begin{macrocode} %\ProvidesExplFile %<*dvipdfmx> - {l3backend-testphase-dvipdfmx.def}{2023-11-17}{} + {l3backend-testphase-dvipdfmx.def}{2023-12-09}{} {LaTeX~PDF~management~testphase~bundle~backend~support: dvipdfmx} % %<*dvips> - {l3backend-testphase-dvips.def}{2023-11-17}{} + {l3backend-testphase-dvips.def}{2023-12-09}{} {LaTeX~PDF~management~testphase~bundle~backend~support: dvips} % %<*dvisvgm> - {l3backend-testphase-dvisvgm.def}{2023-11-17}{} + {l3backend-testphase-dvisvgm.def}{2023-12-09}{} {LaTeX~PDF~management~testphase~bundle~backend~support: dvisvgm} % %<*luatex> - {l3backend-testphase-luatex.def}{2023-11-17}{} + {l3backend-testphase-luatex.def}{2023-12-09}{} {LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (LuaTeX)} % %<*pdftex> - {l3backend-testphase-pdftex.def}{2023-11-17}{} + {l3backend-testphase-pdftex.def}{2023-12-09}{} {LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (pdfTeX)} % %<*xdvipdfmx> - {l3backend-testphase-xetex.def}{2023-11-17}{} + {l3backend-testphase-xetex.def}{2023-12-09}{} {LaTeX~PDF~management~testphase~bundle~backend~support: XeTeX} % % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfannot.dtx b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfannot.dtx index 4c0942ad727..dfb1f12e75f 100644 --- a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfannot.dtx +++ b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfannot.dtx @@ -48,7 +48,7 @@ % }^^A % } % -% \date{Version 0.96c, released 2023-11-17} +% \date{Version 0.96d, released 2023-12-09} % % \maketitle % \begin{documentation} @@ -432,7 +432,7 @@ % \begin{macrocode} %<@@=pdfannot> %<*header> -\ProvidesExplPackage{l3pdfannot}{2023-11-17}{0.96c} +\ProvidesExplPackage{l3pdfannot}{2023-12-09}{0.96d} {PDF-annotations} \RequirePackage{l3pdfdict} % @@ -441,7 +441,8 @@ % bitset for it. % \begin{macrocode} %<*package> -\RequirePackage{l3bitset} +\cs_if_exist:NF \bitset_new:Nn + { \RequirePackage { l3bitset } } \bitset_new:Nn \l_pdfannot_F_bitset { Invisible = 1, diff --git a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfdict.dtx b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfdict.dtx index abb1d339364..d1007322fa5 100644 --- a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfdict.dtx +++ b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfdict.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.96c, released 2023-11-17} +% \date{Version 0.96d, released 2023-12-09} % % \maketitle % \begin{documentation} @@ -208,7 +208,7 @@ % \begin{macrocode} %<@@=pdfdict> %<*header> -\ProvidesExplPackage{l3pdfdict}{2023-11-17}{0.96c} +\ProvidesExplPackage{l3pdfdict}{2023-12-09}{0.96d} {Tools for PDF dictionaries (LaTeX PDF management testphase bundle)} % % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-action.dtx b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-action.dtx index b4d535bfc2f..ef7f1a5c4c5 100644 --- a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-action.dtx +++ b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-action.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.96c, released 2023-11-17} +% \date{Version 0.96d, released 2023-12-09} % % \maketitle % \begin{documentation} diff --git a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-checkbox.dtx b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-checkbox.dtx index dfbf0c3af31..6e6f5fe007b 100644 --- a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-checkbox.dtx +++ b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-checkbox.dtx @@ -64,7 +64,7 @@ % }^^A % } % -% \date{Version 0.96c, released 2023-11-17} +% \date{Version 0.96d, released 2023-12-09} % % \maketitle % \begin{documentation} diff --git a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-choice.dtx b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-choice.dtx index c94891b7331..ae2cdec29d1 100644 --- a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-choice.dtx +++ b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-choice.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.96c, released 2023-11-17} +% \date{Version 0.96d, released 2023-12-09} % % \maketitle % \begin{documentation} diff --git a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-pushbutton.dtx b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-pushbutton.dtx index fb7b913a76f..cf0153732e2 100644 --- a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-pushbutton.dtx +++ b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-pushbutton.dtx @@ -55,7 +55,7 @@ % }^^A % } % -% \date{Version 0.96c, released 2023-11-17} +% \date{Version 0.96d, released 2023-12-09} % % \maketitle % \begin{documentation} diff --git a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-radiobutton.dtx b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-radiobutton.dtx index e9519906506..2f9ce890c52 100644 --- a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-radiobutton.dtx +++ b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-radiobutton.dtx @@ -83,7 +83,7 @@ % }^^A % } % -% \date{Version 0.96c, released 2023-11-17} +% \date{Version 0.96d, released 2023-12-09} % % \maketitle % \begin{documentation} diff --git a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-textfield.dtx b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-textfield.dtx index 7922c659a75..15fe26a8050 100644 --- a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-textfield.dtx +++ b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield-textfield.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.96c, released 2023-11-17} +% \date{Version 0.96d, released 2023-12-09} % % \maketitle % \begin{documentation} diff --git a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield.dtx b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield.dtx index 59275311f49..28ce09312cb 100644 --- a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield.dtx +++ b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffield.dtx @@ -69,7 +69,7 @@ % }^^A % } % -% \date{Version 0.96c, released 2023-11-17} +% \date{Version 0.96d, released 2023-12-09} % % \maketitle % \begin{documentation} @@ -972,7 +972,7 @@ %<*package> %<@@=pdffield> \NeedsTeXFormat{LaTeX2e} -\ProvidesExplPackage{l3pdffield-testphase}{2023-11-17}{0.96c}% +\ProvidesExplPackage{l3pdffield-testphase}{2023-12-09}{0.96d}% {form fields} % \end{macrocode} % \subsection{hyperref specific command} diff --git a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffile.dtx b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffile.dtx index 5a11d41e7ee..01d247b7e72 100644 --- a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffile.dtx +++ b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdffile.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.96c, released 2023-11-17} +% \date{Version 0.96d, released 2023-12-09} % % \maketitle % \begin{documentation} @@ -398,7 +398,7 @@ % % \begin{macrocode} %<*header> -\ProvidesExplPackage{l3pdffile}{2023-11-17}{0.96c} +\ProvidesExplPackage{l3pdffile}{2023-12-09}{0.96d} {embedding and referencing files in PDF---LaTeX PDF management testphase bundle} \RequirePackage{l3pdftools} %temporarly!! % diff --git a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfmanagement.dtx b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfmanagement.dtx index 88704f2e51c..2a7ce89481f 100644 --- a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfmanagement.dtx +++ b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfmanagement.dtx @@ -57,7 +57,7 @@ % }^^A % } % -% \date{Version 0.96c, released 2023-11-17} +% \date{Version 0.96d, released 2023-12-09} % % \maketitle % \begin{documentation} @@ -632,7 +632,7 @@ %<@@=pdfmanagement> %<*header> % -\ProvidesExplPackage{l3pdfmanagement}{2023-11-17}{0.96c} +\ProvidesExplPackage{l3pdfmanagement}{2023-12-09}{0.96d} {Management of core PDF dictionaries (LaTeX PDF management testphase bundle)} % % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfmeta.dtx b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfmeta.dtx index 6d6b19b2deb..720669e2375 100644 --- a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfmeta.dtx +++ b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfmeta.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.96c, released 2023-11-17} +% \date{Version 0.96d, released 2023-12-09} % % \maketitle % \begin{documentation} @@ -458,6 +458,33 @@ % It is up to the author to ensure and validate % that the document actually follows the standard. % +% \subsubsection{Declarations} +% PDF knows beside standards also a more generic method to declare conformance +% to some specification by adding a declaration, +% see \url{https://pdfa.org/wp-content/uploads/2019/09/PDF-Declarations.pdf}). +% Such declarations can be added as a simple url which identify the specification or +% with additional details regarding date and credentials. An example would be +% +% \begin{verbatim} +% \DocumentMetadata{} +% \documentclass{article} +% \ExplSyntaxOn +% \pdfmeta_xmp_add_declaration:e {https://pdfa.org/declarations\c_hash_str iso32005} +% \pdfmeta_xmp_add_declaration:ennnn +% {https://pdfa.org/declarations\c_hash_str wcag21A}{}{2023-11-20}{}{} +% \pdfmeta_xmp_add_declaration:nnnnn +% {https://github.com/TikZlings/no-duck-harmed} +% {Ulrike~Fischer}{2023-11-20}{Bär}{https://github.com/u-fischer/bearwear} +% \pdfmeta_xmp_add_declaration:nnnnn +% {https://github.com/TikZlings/no-duck-harmed} +% {Ulrike~Fischer}{2023-11-20}{Paulo}{https://github.com/cereda/sillypage} +% \ExplSyntaxOff +% \begin{document} +% text +% \end{document} +% +% \end{verbatim} +% % \subsubsection{Dates} % \begin{itemize} % \item @@ -557,6 +584,31 @@ % With this command a xmlns name space can be added. % \end{function} % +% With the two following commands PDF declarations can be added to the XMP metadata +% (see \url{https://pdfa.org/wp-content/uploads/2019/09/PDF-Declarations.pdf}). +% \begin{function}{\pdfmeta_xmp_add_declaration:n,\pdfmeta_xmp_add_declaration:e} +% \begin{syntax} +% \cs{pdfmeta_xmp_add_declaration:n}\Arg{uri} +% \end{syntax} +% This add a PDF declaration with the required |conformsTo| property to the XMP metadata. +% \meta{uri} should not be empty and is a URI specifying +% the standard or profile referred to by the PDF +% Declaration. If the uri contains a hash, use \cs{c_hash_str} to excape it +% and use the \texttt{e} variant to expand it. +% \end{function} +% +% \begin{function}{\pdfmeta_xmp_add_declaration:nnnnn,\pdfmeta_xmp_add_declaration:ennnn} +% \begin{syntax} +% \cs{pdfmeta_xmp_add_declaration:nnnnn}\Arg{uri}\Arg{By}\Arg{Date}\Arg{Credentials}\Arg{Report} +% \end{syntax} +% This add a PDF declaration to the XMP metadata similar +% to \cs{pdfmeta_xmp_add_declaration:n}. +% With \meta{By}, \meta{Date}, \meta{Credentials}, \meta{Report} the optional +% fields |claimBy| (text), |claimDate| (iso date), |claimCredentials| (text) and +% |claimReport| (uri) of the |claimData| property can be given. +% If \cs{pdfmeta_xmp_add_declaration:nnnnn} is used twice with the same \meta{uri} +% argument the |claimData| are concatenated. There is no check if the |claimData| are identical. +% \end{function} % \end{documentation} % % \begin{implementation} @@ -566,7 +618,7 @@ % \begin{macrocode} %<@@=pdfmeta> %<*header> -\ProvidesExplPackage{l3pdfmeta}{2023-11-17}{0.96c} +\ProvidesExplPackage{l3pdfmeta}{2023-12-09}{0.96d} {PDF-Standards---LaTeX PDF management testphase bundle} % % \end{macrocode} @@ -1217,7 +1269,7 @@ {\AddToDocumentProperties [document]{pdfstandard-X}{PDF/X-6p}}, _pdfstandard / UA-1 .code:n = { - \AddToDocumentProperties [document]{pdfstandard-UA}{{1}{2016}} + \AddToDocumentProperties [document]{pdfstandard-UA}{{1}{}} }, _pdfstandard / UA-2 .code:n = {\AddToDocumentProperties [document]{pdfstandard-UA}{{2}{2023}}}, @@ -1735,6 +1787,7 @@ \@@_xmp_build_pdf: \@@_xmp_build_xmpRights: \@@_xmp_build_standards: %pdfaid,pdfxid,pdfuaid + \@@_xmp_build_pdfd: \@@_xmp_build_dc: \@@_xmp_build_photoshop: \@@_xmp_build_xmp: @@ -2129,6 +2182,84 @@ } % \end{macrocode} % \item[jav]: currently ignored +% +% \item[declarations] The PDF Declarations mechanism allows creation and +% editing software to declare, via a PDF Declaration, a PDF file to be in +% conformance with a 3rd party specification or profile +% that may not be related to PDF technology. Their specification is for example +% described in \url{https://pdfa.org/wp-content/uploads/2019/09/PDF-Declarations.pdf}. +% +% If declarations are added to the XMP-metadata they need (for pdf/A compliancy) a +% schema declaration. We do not add it by default but define here a command to enable +% it. (This can be done in the document preamble as xmp is built only at the end.) +% +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_schema_enable_pdfd: + { + \@@_xmp_xmlns_new:ne {pdfd}{http://pdfa.org/declarations/} + \@@_xmp_schema_new:nnn + {PDF~Declarations~Schema} + {pdfd} + {http://pdfa.org/declarations/} + \@@_xmp_property_new:nnnnn + {pdfd} + {declarations} + {Bag~declaration} + {external} + {An~unordered~array~of~PDF~Declaration~entries,~where~each~PDF~Declaration~representing~a~statement~of~conformance~with~ an~identified~external~standard~or~profile,~along~with~optional~information~identifying~the~nature~of~the~claim.} +% \end{macrocode} +% the values are complicated so we use the additions: method to add them. +% \begin{macrocode} + \cs_new_protected:cpn { __pdfmeta_xmp_schema_pdfd_additions: } + { + \@@_xmp_add_packet_open:nn{pdfaSchema}{valueType} + \@@_xmp_add_packet_open:nn{rdf}{Seq} + \@@_xmp_add_packet_open_attr:nnn{rdf}{li}{rdf:parseType="Resource"} + \@@_xmp_add_packet_line:nnn{pdfaType}{type}{claim} + \@@_xmp_add_packet_line:nnn{pdfaType}{namespaceURI} + {http://pdfa.org/declarations/} + \@@_xmp_add_packet_line:nnn{pdfaType}{prefix}{pdfd} + \@@_xmp_add_packet_line:nnn{pdfaType}{description} + {A~structure~describing~properties~of~an~individual claim.} + \@@_xmp_add_packet_open:nn{pdfaType}{field} + \@@_xmp_add_packet_open:nn{rdf}{Seq} + \@@_xmp_add_packet_field:nnn{claimReport}{Text} + {A~URL~to~a~report~containing~details~of~the~specific~conformance~claim.} + \@@_xmp_add_packet_field:nnn{claimCredentials}{Text} + {The~claimant's~credentials.} + \@@_xmp_add_packet_field:nnn{claimDate}{Text} + {A~date~identifying~when~the~claim~was~made.} + \@@_xmp_add_packet_field:nnn{claimBy}{Text} + {The~name~of~the~organization~and/or~individual~and/or~software~making~the~claim.} + \@@_xmp_add_packet_close:nn{rdf}{Seq} + \@@_xmp_add_packet_close:nn{pdfaType}{field} + \@@_xmp_add_packet_close:nn{rdf}{li} + \@@_xmp_add_packet_open_attr:nnn{rdf}{li}{rdf:parseType="Resource"} + \@@_xmp_add_packet_line:nnn{pdfaType}{type}{declaration} + \@@_xmp_add_packet_line:nnn{pdfaType}{namespaceURI} + {http://pdfa.org/declarations/} + \@@_xmp_add_packet_line:nnn{pdfaType}{prefix}{pdfd} + \@@_xmp_add_packet_line:nnn{pdfaType}{description} + {A~structure~describing~a~single~PDF~ Declaration~asserting~conformance~with~ an~externally-identified~standard~or~ profile.} + \@@_xmp_add_packet_open:nn{pdfaType}{field} + \@@_xmp_add_packet_open:nn{rdf}{Seq} + \@@_xmp_add_packet_field:nnn{conformsTo}{Text} + {A~property~containing~a~URI~specifying~the~standard~or~profile~by~the~PDF~Declaration.~This~property~is~ intended~to~mirror~the~Dublin~Core~property~dc:conformsTo.} + \@@_xmp_add_packet_field:nnn{claimData}{Bag~claim} + {An~unordered~array~of~claim~data,~where~each~claim~identifies~the~nature~of~the~claim.} + \@@_xmp_add_packet_close:nn{rdf}{Seq} + \@@_xmp_add_packet_close:nn{pdfaType}{field} + \@@_xmp_add_packet_close:nn{rdf}{li} + \@@_xmp_add_packet_close:nn{rdf}{Seq} + \@@_xmp_add_packet_close:nn{pdfaSchema}{valueType} + } +% \end{macrocode} +% the schema should be added only once so disable it after use: +% \begin{macrocode} + \cs_gset_eq:NN \@@_xmp_schema_enable_pdfd: \prg_do_nothing: + } +% \end{macrocode} % % \end{description} % \subsection{The actual user / document data} @@ -2241,8 +2372,56 @@ % \end{macrocode} % \end{macro} % - -% \subsubsection{Photoshop} +% \subsection{Declarations} +% See \url{https://pdfa.org/wp-content/uploads/2019/09/PDF-Declarations.pdf} +% +% \begin{variable}{\g_@@_xmp_pdfd_data_prop} +% This holds the data for declarations. +% \begin{macrocode} +\prop_new:N \g_@@_xmp_pdfd_data_prop +% \end{macrocode} +% \end{variable} +% the main building command used in the xmp generation +% \begin{macro}{\@@_xmp_build_pdfd:} +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_build_pdfd: + { + \prop_if_empty:NF\g_@@_xmp_pdfd_data_prop + { + \@@_xmp_add_packet_open:nn{pdfd}{declarations} + \@@_xmp_add_packet_open:nn{rdf}{Bag} + \prop_map_inline:Nn \g_@@_xmp_pdfd_data_prop + { + \@@_xmp_build_pdfd_claim:nn{##1}{##2} + } + \@@_xmp_add_packet_close:nn{rdf}{Bag} + \@@_xmp_add_packet_close:nn{pdfd}{declarations} + } + } +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@@_xmp_build_pdfd_claim:nn} +% This build the xml for one claim. If there is no +% claimData only the conformsTo is output. +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_build_pdfd_claim:nn #1#2 + { + \@@_xmp_add_packet_open_attr:nnn{rdf}{li}{rdf:parseType="Resource"} + \@@_xmp_add_packet_line:nnn{pdfd}{conformsTo}{#1} + \tl_if_empty:nF {#2} + { + \@@_xmp_add_packet_open:nn{pdfd}{claimData} + \@@_xmp_add_packet_open:nn{rdf}{Bag} + #2 + \@@_xmp_add_packet_close:nn{rdf}{Bag} + \@@_xmp_add_packet_close:nn{pdfd}{claimData} + } + \@@_xmp_add_packet_close:nn{rdf}{li} + } +% \end{macrocode} +% \end{macro} +% +% \subsection{Photoshop} % \begin{macro}{\@@_xmp_build_photoshop:} % \begin{macrocode} \cs_new_protected:Npn \@@_xmp_build_photoshop: @@ -2633,6 +2812,45 @@ } % \end{macrocode} % \end{macro} +% +% \begin{macro}{\pdfmeta_xmp_add_declaration:n,\pdfmeta_xmp_add_declaration:e} +% \begin{macrocode} +\cs_new_protected:Npn \pdfmeta_xmp_add_declaration:n #1 %conformsTo uri + { + \@@_xmp_schema_enable_pdfd: + \prop_gput:Nnn\g_@@_xmp_pdfd_data_prop{#1}{} + } +\cs_generate_variant:Nn \pdfmeta_xmp_add_declaration:n {e} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pdfmeta_xmp_add_declaration:nnnnn,\pdfmeta_xmp_add_declaration:ennnn} +% \begin{macrocode} +\cs_new_protected:Npn \pdfmeta_xmp_add_declaration:nnnnn #1#2#3#4#5 + %#1=conformsTo uri, #2 claimBy, #3 claimDate #4 claimCredentials #4 claimReport + { + \@@_xmp_schema_enable_pdfd: + \tl_set:Nn \l_@@_tmpa_tl + { + \@@_xmp_add_packet_open_attr:nnn{rdf}{li}{rdf:parseType="Resource"} + \@@_xmp_add_packet_line:nnn{pdfd}{claimBy}{#2} + \@@_xmp_add_packet_line:nnn{pdfd}{claimDate}{#3} + \@@_xmp_add_packet_line:nnn{pdfd}{claimCredentials}{#4} + \@@_xmp_add_packet_line:nnn{pdfd}{claimReport}{#5} + \@@_xmp_add_packet_close:nn{rdf}{li} + } + \prop_get:NnNT \g_@@_xmp_pdfd_data_prop {#1}\l_@@_tmpb_tl + { + \tl_concat:NNN \l_@@_tmpa_tl \l_@@_tmpa_tl \l_@@_tmpb_tl + } + \prop_gput:Nno\g_@@_xmp_pdfd_data_prop{#1} + { + \l_@@_tmpa_tl + } + } +\cs_generate_variant:Nn\pdfmeta_xmp_add_declaration:nnnnn {e} +% \end{macrocode} +% \end{macro} +% % \begin{macrocode} % % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdftools.dtx b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdftools.dtx index c6efc127f39..3e5dc1f1fff 100644 --- a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdftools.dtx +++ b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdftools.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.96c, released 2023-11-17} +% \date{Version 0.96d, released 2023-12-09} % % \maketitle % \begin{documentation} @@ -231,7 +231,7 @@ % % \begin{macrocode} %<*header> -\ProvidesExplPackage{l3pdftools}{2023-11-17}{0.96c} +\ProvidesExplPackage{l3pdftools}{2023-12-09}{0.96d} {candidate commands for l3pdf---LaTeX PDF management testphase bundle} % % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfxform.dtx b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfxform.dtx index 0f3196cb0a7..3928d790d33 100644 --- a/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfxform.dtx +++ b/Master/texmf-dist/source/latex/pdfmanagement-testphase/l3pdfxform.dtx @@ -48,7 +48,7 @@ % }^^A % } % -% \date{Version 0.96c, released 2023-11-17} +% \date{Version 0.96d, released 2023-12-09} % % \maketitle % \begin{documentation} @@ -132,7 +132,7 @@ % \begin{macrocode} %<@@=pdf> %<*header> -\ProvidesExplPackage{l3pdfxform}{2023-11-17}{0.96c} +\ProvidesExplPackage{l3pdfxform}{2023-12-09}{0.96d} {command to create xforms (beta)---LaTeX PDF management testphase bundle} % % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/pdfmanagement-testphase/ltdocinit.dtx b/Master/texmf-dist/source/latex/pdfmanagement-testphase/ltdocinit.dtx index 332012c4dc2..7688446417c 100644 --- a/Master/texmf-dist/source/latex/pdfmanagement-testphase/ltdocinit.dtx +++ b/Master/texmf-dist/source/latex/pdfmanagement-testphase/ltdocinit.dtx @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Version 0.96c, released 2023-11-17} +% \date{Version 0.96d, released 2023-12-09} % % \maketitle % \begin{documentation} @@ -220,7 +220,7 @@ % \begin{macrocode} %<@@=pdfmanagement> %<*header> -\ProvidesExplPackage{ltdocinit}{2023-11-17}{0.96c} +\ProvidesExplPackage{ltdocinit}{2023-12-09}{0.96d} {Initialize document metadata} % % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/pdfmanagement-testphase/pdfmanagement-firstaid.dtx b/Master/texmf-dist/source/latex/pdfmanagement-testphase/pdfmanagement-firstaid.dtx index 6154ccf3e34..cdcc24255ed 100644 --- a/Master/texmf-dist/source/latex/pdfmanagement-testphase/pdfmanagement-firstaid.dtx +++ b/Master/texmf-dist/source/latex/pdfmanagement-testphase/pdfmanagement-firstaid.dtx @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Version 0.96c, released 2023-11-17} +% \date{Version 0.96d, released 2023-12-09} % % \maketitle % \begin{documentation} @@ -63,7 +63,7 @@ % |debug={firstaidoff={name1,name2,...},...}|. % \begin{macrocode} %<*package> -\ProvidesExplPackage{pdfmanagement-firstaid}{2023-11-17}{0.96c} +\ProvidesExplPackage{pdfmanagement-firstaid}{2023-12-09}{0.96d} {LaTeX PDF management testphase bundle / firstaid-patches} %<@@=pdfmanagement> diff --git a/Master/texmf-dist/source/latex/pdfmanagement-testphase/pdfmanagement-testphase.dtx b/Master/texmf-dist/source/latex/pdfmanagement-testphase/pdfmanagement-testphase.dtx index a685374c524..189f496cf26 100644 --- a/Master/texmf-dist/source/latex/pdfmanagement-testphase/pdfmanagement-testphase.dtx +++ b/Master/texmf-dist/source/latex/pdfmanagement-testphase/pdfmanagement-testphase.dtx @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Version 0.96c, released 2023-11-17} +% \date{Version 0.96d, released 2023-12-09} % % \maketitle % \begin{documentation} @@ -233,10 +233,7 @@ % % \section{Requirements} % The new PDF management is developed parallel to the \LaTeX{} format -% and should be updated together with the format. It -% requires currently a \LaTeX{} format from 2023/11/01 or later -% and an L3 programming layer of 2023-11-01 or later. -% It currently depends on the experimental package and \pkg{l3bitset}. +% and should be updated together with the format. % In some places, e.g. when writing strings to the pdf it assumes that % the file is utf8 encoded -- ascii will naturally work too, but legacy 8bit encodings are % not supported. @@ -397,7 +394,7 @@ % \begin{macrocode} %<@@=pdf> %<*package> -\ProvidesExplPackage{pdfmanagement-testphase}{2023-11-17}{0.96c} +\ProvidesExplPackage{pdfmanagement-testphase}{2023-12-09}{0.96d} {LaTeX PDF management testphase bundle} \providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} \IfFormatAtLeastTF{2020-10-01}{}{ @@ -425,7 +422,7 @@ % to allow to set it in the document. % \begin{macrocode} %<*header> -\ProvidesExplFile{pdfmanagement-testphase.ltx}{2023-11-17}{0.96c} +\ProvidesExplFile{pdfmanagement-testphase.ltx}{2023-12-09}{0.96d} {PDF~management~code~(testphase)} % \end{macrocode} % We define a boolean for the new delayed shipout. This is temporary. At some diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/color-ltx.sty b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/color-ltx.sty index 6b86bc4c172..fb44b9e7265 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/color-ltx.sty +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/color-ltx.sty @@ -24,7 +24,7 @@ %% This file has the LPPL maintenance status "maintained". %% \NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesPackage{color-ltx}[2023-11-17 v0.96c +\ProvidesPackage{color-ltx}[2023-12-09 v0.96d Standard LaTeX Color (patched for l3color, part of pdfmanagement-testphase, original version 2022/01/06 v1.3d) (DPC)] \edef\Gin@codes{% \catcode`\noexpand\^^A\the\catcode`\^^A\relax diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty index c6f186877a6..21609d988b0 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty @@ -19,7 +19,7 @@ % % for those people who are interested. \NeedsTeXFormat{LaTeX2e}[2020/10/01] -\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2023-11-17}{0.96c} +\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2023-12-09}{0.96d} {temporay patches to for the colorspace package to test pdfresource management ... UF} % colorspace can define more models, that l3color can't yet handle. diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def index 58d59f604ef..ac3e3307f94 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: hyperref-generic.dtx -\ProvidesFile{hgeneric-testphase.def}[2023-11-17 v0.96c % +\ProvidesFile{hgeneric-testphase.def}[2023-12-09 v0.96d % generic Hyperref driver for the LaTeX PDF management testphase bundle] \RequirePackage{etoolbox} %why? @@ -195,17 +195,17 @@ \cs_set_protected:Npn \hypersetup #1 { %\kvsetkeys{Hyp} {#1} - \keys_set:nn { hyp / setup }{ #1 } + \keys_set:nn { hyp }{ #1 } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { unknown .code:n = { \msg_warning:nneee { hyp } { unknown-key } - { hyp~/~setup }{ \l_keys_key_str } { #1 } + { hyp }{ \l_keys_key_str } { #1 } } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { next-anchor .code:n = { @@ -230,7 +230,7 @@ ,destination .tl_set:N = \l__hyp_href_pdf_destination_tl ,pdfremotestartview .code:n = { - \keys_set:nn { hyp / setup } + \keys_set:nn { hyp } { pdfremotestartview = #1 } } ,page .code:n = @@ -249,7 +249,7 @@ { \pdfdict_put:nnn{l_hyp/annot/A}{Next}{#1} \tl_set:Nn \Hy@href@nextactionraw {/Next~#1} - \keys_set:nn {hyp / setup }{ pdfnewwindow = true} + \keys_set:nn {hyp }{ pdfnewwindow = true} } } ,afrelationship .code:n = @@ -260,7 +260,7 @@ } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,href / urlencode .bool_set:N = \l__hyp_href_url_encode_bool ,href / urlencode .default:n = {true} @@ -401,7 +401,7 @@ } \cs_generate_variant:Nn \__hyp_store_metadata:nn {en,ne,ee} \hook_new:n{hyp/link/cite} -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,citecolor .code:n = {\__hyp_color_set:ne {hyp/color/cite}{#1}\__hyp_citecolor_hook_init:} ,citebordercolor @@ -411,7 +411,7 @@ { \hook_gput_code:nnn { hyp/link/cite }{hyp/cite} { - \keys_set:nn { hyp / setup } + \keys_set:nn { hyp } { linkcolor = hyp/color/cite } @@ -422,7 +422,7 @@ { \hook_gput_code:nnn { hyp/link/cite }{hyp/citeborder} { - \keys_set:nn { hyp / setup } + \keys_set:nn { hyp } { linkbordercolor = hyp/color/citeborder } @@ -589,6 +589,27 @@ \__hyp_PageLabels_gpush: } } +\int_new:N \g__hyp_linknestlevel_int +\prg_new_conditional:Npnn \__hyp_if_outer_link: {TF} + { + \int_compare:nNnTF { \g__hyp_linknestlevel_int } > {1} + { \prg_return_false: } + { \prg_return_true: } + } + +\cs_new:Npn \__hyp_check_link_nesting:TF #1 #2 + { + \use_i:nn {#1}{#2} + } +\keys_define:nn { hyp } + { + nested-links .choice:, + nested-links / true .code:n = + { \cs_set_eq:NN \__hyp_check_link_nesting:TF \use_i:nn }, + nested-links / false .code:n = + { \cs_set_eq:NN \__hyp_check_link_nesting:TF \__hyp_if_outer_link:TF }, + nested-links .default:n = {true} + } \Hy@WrapperDef \__hyp_destination:nn #1 #2 { \mode_if_horizontal:T { \@savsf\spacefactor } @@ -670,27 +691,41 @@ { \bool_if:NTF \l__hyp_annot_GoTo_bool { - \Hy@VerboseLinkStart{#1}{#2} - \group_begin: - \tl_set:Nn \l_hyp_current_dest_name_tl {#2} - \hook_use:n {hyp/link/#1} - \__hyp_link_goto_begin:nw {#2}#3\Hy@xspace@end - \__hyp_link_goto_end: - \group_end: - \Hy@VerboseLinkStop + \int_gincr:N\g__hyp_linknestlevel_int + \__hyp_check_link_nesting:TF + { + \Hy@VerboseLinkStart{#1}{#2} + \group_begin: + \tl_set:Nn \l_hyp_current_dest_name_tl {#2} + \hook_use:n {hyp/link/#1} + \__hyp_link_goto_begin:nw {#2}#3\Hy@xspace@end + \__hyp_link_goto_end: + \group_end: + \Hy@VerboseLinkStop + } + { + \group_begin: #3\group_end: + } + \int_gdecr:N\g__hyp_linknestlevel_int } {{\let\protect\relax#3}} } - \cs_new_protected:Npn \hyper@linkstart #1 #2 %#1 context, #2=destination name { \bool_if:NT \l__hyp_annot_GoTo_bool { - \Hy@VerboseLinkStart{#1}{#2}% only for debug - \group_begin: - \tl_set:Nn \l_hyp_current_dest_name_tl {#2} - \hook_use:n {hyp/link/#1} - \__hyp_link_goto_begin:nw {#2} + \int_gincr:N\g__hyp_linknestlevel_int + \__hyp_check_link_nesting:TF + { + \Hy@VerboseLinkStart{#1}{#2}% only for debug + \group_begin: + \tl_set:Nn \l_hyp_current_dest_name_tl {#2} + \hook_use:n {hyp/link/#1} + \__hyp_link_goto_begin:nw {#2} + } + { + \group_begin: + } } } @@ -698,9 +733,16 @@ { \bool_if:NT \l__hyp_annot_GoTo_bool { - \__hyp_link_goto_end: - \group_end: - \Hy@VerboseLinkStop + \__hyp_check_link_nesting:TF + { + \__hyp_link_goto_end: + \group_end: + \Hy@VerboseLinkStop + } + { + \group_end: + } + \int_gdecr:N\g__hyp_linknestlevel_int } } \pdfdict_new:n {l_hyp/annot/A/URI} @@ -711,31 +753,39 @@ { \bool_if:NTF \l__hyp_annot_URI_bool { - \group_begin: - \__hyp_text_pdfstring:eoN - { #2} - { \l__hyp_text_enc_uri_print_tl } - \l__hyp_uri_tmpa_tl - \pdfdict_put:nno{l_hyp/annot/A/URI}{URI}{\l__hyp_uri_tmpa_tl} - \bool_if:NT \l__hyp_href_url_ismap_bool - { - \pdfdict_put:nnn{l_hyp/annot/A/URI}{IsMap}{true} - } - \cs_set_eq:NN \# \c_hash_str - \cs_set_eq:NN \% \c_percent_str - \Hy@safe@activestrue - \mode_leave_vertical: - \pdfannot_dict_put:nne {link/URI}{A}{<<\pdfdict_use:n {l_hyp/annot/A/URI}>>} - \pdfannot_link:nen { URI } - { + \int_gincr:N\g__hyp_linknestlevel_int + \__hyp_check_link_nesting:TF + { + \group_begin: + \__hyp_text_pdfstring:eoN + { #2} + { \l__hyp_text_enc_uri_print_tl } + \l__hyp_uri_tmpa_tl + \pdfdict_put:nno{l_hyp/annot/A/URI}{URI}{\l__hyp_uri_tmpa_tl} + \bool_if:NT \l__hyp_href_url_ismap_bool + { + \pdfdict_put:nnn{l_hyp/annot/A/URI}{IsMap}{true} + } + \cs_set_eq:NN \# \c_hash_str + \cs_set_eq:NN \% \c_percent_str + \Hy@safe@activestrue + \mode_leave_vertical: + \pdfannot_dict_put:nne {link/URI}{A}{<<\pdfdict_use:n {l_hyp/annot/A/URI}>>} + \pdfannot_link:nen { URI } + { + } + { + \let\protect\relax + #1 + \Hy@xspace@end + \Hy@VerboseLinkStop %where is the start?? + } + \group_end: } { - \let\protect\relax - #1 - \Hy@xspace@end - \Hy@VerboseLinkStop %where is the start?? + \group_begin: #1 \group_end: } - \group_end: + \int_gdecr:N\g__hyp_linknestlevel_int } {{\let\protect\relax#1}} } @@ -749,52 +799,60 @@ { \bool_if:NTF \l__hyp_annot_GoToR_bool { - \group_begin: - \tl_set:Ne \l__hyp_filename_tmpa_tl { \text_expand:n { #2 } } - \exp_args:Ne - \pdf_object_if_exist:nF { __hyp_file_\tl_to_str:N \l__hyp_filename_tmpa_tl } - { - \pdfdict_put:nne { l_pdffile/Filespec}{Subtype}{\pdf_name_from_unicode_e:n {application/pdf}} - \pdffile_embed_file:noe - {} - {\l__hyp_filename_tmpa_tl } - {__hyp_file_\tl_to_str:N \l__hyp_filename_tmpa_tl } - } - \pdfdict_put:nne - {l_hyp/annot/A/GoToR} - {F} - {\pdf_object_ref:e {__hyp_file_\tl_to_str:N \l__hyp_filename_tmpa_tl}} - \__hyp_text_pdfstring:nnN - { #3 } - { \l__hyp_text_enc_dest_print_tl } - \l__hyp_dest_name_tmpa_tl - \tl_if_blank:eTF {#3} + \int_gincr:N\g__hyp_linknestlevel_int + \__hyp_check_link_nesting:TF { - \pdfdict_put:nne {l_hyp/annot/A/GoToR}{D} + \group_begin: + \tl_set:Ne \l__hyp_filename_tmpa_tl { \text_expand:n { #2 } } + \exp_args:Ne + \pdf_object_if_exist:nF { __hyp_file_\tl_to_str:N \l__hyp_filename_tmpa_tl } + { + \pdfdict_put:nne { l_pdffile/Filespec}{Subtype}{\pdf_name_from_unicode_e:n {application/pdf}} + \pdffile_embed_file:noe + {} + {\l__hyp_filename_tmpa_tl } + {__hyp_file_\tl_to_str:N \l__hyp_filename_tmpa_tl } + } + \pdfdict_put:nne + {l_hyp/annot/A/GoToR} + {F} + {\pdf_object_ref:e {__hyp_file_\tl_to_str:N \l__hyp_filename_tmpa_tl}} + \__hyp_text_pdfstring:nnN + { #3 } + { \l__hyp_text_enc_dest_print_tl } + \l__hyp_dest_name_tmpa_tl + \tl_if_blank:eTF {#3} { - [ - \int_eval:n - { \int_max:nn {0}{ 0\l__hyp_href_pdf_page_tl - 1 }} - /\l__hyp_dest_pdfremotestartview_tl - ] + \pdfdict_put:nne {l_hyp/annot/A/GoToR}{D} + { + [ + \int_eval:n + { \int_max:nn {0}{ 0\l__hyp_href_pdf_page_tl - 1 }} + /\l__hyp_dest_pdfremotestartview_tl + ] + } } + { + \pdfdict_put:nno {l_hyp/annot/A/GoToR}{D}{\l__hyp_dest_name_tmpa_tl} + } + \mode_leave_vertical: + \pdf_object_unnamed_write:ne{dict}{\pdfdict_use:n {l_hyp/annot/A/GoToR}} + \pdfannot_dict_put:nne {link/GoToR}{A}{\pdf_object_ref_last:} + \pdfannot_link:nnn %expansion?? + { GoToR } + { + } + { + \let\protect\relax + #1\Hy@xspace@end + \Hy@VerboseLinkStop %where is the start?? + } + \group_end: } { - \pdfdict_put:nno {l_hyp/annot/A/GoToR}{D}{\l__hyp_dest_name_tmpa_tl} - } - \mode_leave_vertical: - \pdf_object_unnamed_write:ne{dict}{\pdfdict_use:n {l_hyp/annot/A/GoToR}} - \pdfannot_dict_put:nne {link/GoToR}{A}{\pdf_object_ref_last:} - \pdfannot_link:nnn %expansion?? - { GoToR } - { - } - { - \let\protect\relax - #1\Hy@xspace@end - \Hy@VerboseLinkStop %where is the start?? + \group_begin: #1 \group_end: } - \group_end: + \int_gdecr:N\g__hyp_linknestlevel_int } {{\let\protect\relax#1}} } @@ -806,44 +864,53 @@ { \bool_if:NTF \l__hyp_annot_Launch_bool { - \group_begin: - \__hyp_text_pdfstring:nnN - { #1 } - { \l__hyp_text_enc_file_print_tl } - \l__hyp_filename_tmpa_tl - \pdfdict_put:nno {l_hyp/annot/A/Launch}{F}{\l__hyp_filename_tmpa_tl} - \__hyp_text_pdfstring:noN - { #3 } - { \l__hyp_text_enc_para_print_tl } - \l__hyp_para_tmpa_tl - \bool_if:nTF - { - \str_if_eq_p:Vn \l__hyp_para_tmpa_tl {()} - || - \pdf_version_compare_p:Nn > {1.9} - } - { - \pdfdict_remove:nn {l_hyp/annot/A/Launch}{Win} - } - { - \pdfdict_put:nne - {l_hyp/annot/A/Launch} - {Win} - {<

>} - } - \mode_leave_vertical: - \pdfannot_dict_put:nne {link/Launch}{A}{<<\pdfdict_use:n {l_hyp/annot/A/Launch}>>} - \pdfannot_link:nen - { Launch } - { - % /A - } - { - \let\protect\relax - #2\Hy@xspace@end - \Hy@VerboseLinkStop %where is the start?? - } - \group_end: + \int_gincr:N\g__hyp_linknestlevel_int + \__hyp_check_link_nesting:TF + { + \group_begin: + \__hyp_text_pdfstring:nnN + { #1 } + { \l__hyp_text_enc_file_print_tl } + \l__hyp_filename_tmpa_tl + \pdfdict_put:nno {l_hyp/annot/A/Launch}{F}{\l__hyp_filename_tmpa_tl} + \__hyp_text_pdfstring:noN + { #3 } + { \l__hyp_text_enc_para_print_tl } + \l__hyp_para_tmpa_tl + \bool_if:nTF + { + \str_if_eq_p:Vn \l__hyp_para_tmpa_tl {()} + || + \pdf_version_compare_p:Nn > {1.9} + } + { + \pdfdict_remove:nn {l_hyp/annot/A/Launch}{Win} + } + { + \pdfdict_put:nne + {l_hyp/annot/A/Launch} + {Win} + {<

>} + } + \mode_leave_vertical: + \pdfannot_dict_put:nne {link/Launch}{A}{<<\pdfdict_use:n {l_hyp/annot/A/Launch}>>} + \pdfannot_link:nen + { Launch } + { + % /A + % << + % \pdfdict_use:n {l_hyp/annot/A/Launch} + % >> + } + { + \let\protect\relax + #2\Hy@xspace@end + \Hy@VerboseLinkStop %where is the start?? + } + \group_end: + } + { \group_begin: #2 \group_end: } + \int_gdecr:N\g__hyp_linknestlevel_int } {{\let\protect\relax#2}} } @@ -862,27 +929,37 @@ { \bool_if:NTF \l__hyp_annot_Named_bool { - \group_begin: - \pdfmeta_standard_verify:nnTF {named_actions}{#1} - { - \mode_leave_vertical: - \pdfdict_put:nne {l_hyp/annot/A/Named}{N} - {\pdf_name_from_unicode_e:n{#1}} - \pdfannot_dict_put:nne {link/Named}{A}{<<\pdfdict_use:n {l_hyp/annot/A/Named}>>} - \pdfannot_link:nnn { Named } + \int_gincr:N\g__hyp_linknestlevel_int + \__hyp_check_link_nesting:TF + { + \group_begin: + \pdfmeta_standard_verify:nnTF {named_actions}{#1} { + \mode_leave_vertical: + \pdfdict_put:nne {l_hyp/annot/A/Named}{N} + {\pdf_name_from_unicode_e:n{#1}} + \pdfannot_dict_put:nne {link/Named}{A}{<<\pdfdict_use:n {l_hyp/annot/A/Named}>>} + \pdfannot_link:nnn { Named } + { + % /A + % << + % \pdfdict_use:n { l_hyp/annot/A/Named } + % >> + } + { + #2 + \Hy@xspace@end + \Hy@VerboseLinkStop + } } { + \msg_warning:nnn { hyp } { pdfa-no-named-action }{#1} #2 - \Hy@xspace@end - \Hy@VerboseLinkStop } - } - { - \msg_warning:nnn { hyp } { pdfa-no-named-action }{#1} - #2 - } - \group_end: + \group_end: + } + { \group_begin: #2 \group_end: } + \int_gdecr:N\g__hyp_linknestlevel_int } {{\let\protect\relax#2}} } @@ -944,7 +1021,7 @@ } } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,colorlinks .meta:n = { @@ -960,14 +1037,14 @@ } \seq_map_inline:Nn \c__hyp_annot_types_seq { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { ,color#1 .bool_set:c = { l_hyp_annot_color#1_bool } ,#1color .code:n = { \__hyp_color_set:ne {hyp/color/#1}{##1} } } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,allcolors .meta:n = { @@ -979,7 +1056,7 @@ } ,allcolors .value_required:n = true } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,bordercolormodel .choices:nn = {rgb,cmyk} @@ -988,7 +1065,7 @@ } \prop_map_inline:Nn \c__hyp_map_hyp_annot_prop { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { #1bordercolor .code:n = { @@ -1013,7 +1090,7 @@ } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,allbordercolors .meta:n = { @@ -1028,7 +1105,7 @@ \prop_map_inline:Nn \c__hyp_map_hyp_annot_prop { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { #1border .code:n = { @@ -1047,7 +1124,7 @@ } } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,pdfborder .code:n = { @@ -1074,7 +1151,7 @@ } \prop_map_inline:Nn \c__hyp_map_hyp_annot_prop { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { #1borderstyle .code:n = { @@ -1093,7 +1170,7 @@ } } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,pdfborderstyle .code:n = { @@ -1216,7 +1293,7 @@ { \pdf_version_compare_p:Nn > {1.4} } { \str_if_eq_p:ee{\pdf_version_major:}{-1} } { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { ,_ocgcolorlinks .meta:n = { @@ -1230,7 +1307,7 @@ } } { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { ,_ocgcolorlinks .code:n = { @@ -1242,7 +1319,7 @@ } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,ocgcolorlinks .choice: ,ocgcolorlinks / true .meta:n = @@ -1265,13 +1342,13 @@ { \pdf_version_compare_p:Nn > {1.4} } { \str_if_eq_p:ee{\pdf_version_major:}{-1} } { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { ,ocgcolor#1 .bool_set:c = { l_hyp_annot_ocgcolor#1_bool } } } { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { ,ocgcolor#1 .code:n= { @@ -1286,7 +1363,7 @@ } \prop_map_inline:Nn \c__hyp_map_hyp_annot_prop { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { ,#1highlight .choices:nn = { /I, /N, /O, /P} @@ -1314,7 +1391,7 @@ } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,pdfhighlight .choices:nn = { /I, /N, /O, /P} @@ -1345,7 +1422,7 @@ { \exp_not:n {#1} } } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { hidelinks .meta:n = { @@ -1358,7 +1435,7 @@ \seq_map_inline:Nn \c__hyp_annot_types_seq { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { hide#1 .meta:n = { @@ -1369,21 +1446,21 @@ } } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { colorscheme .code:n = { \prop_map_inline:cn { c__hyp_colorscheme_#1_prop } { - \keys_set:nn { hyp /setup } + \keys_set:nn { hyp } { ##1 = ##2 } } } } -\keys_set:nn { hyp / setup } {colorscheme=phelype} -\keys_define:nn { hyp / setup } +\keys_set:nn { hyp } {colorscheme=phelype} +\keys_define:nn { hyp } { ,unicode .code:n = {} ,pdfencoding .code:n = {} @@ -1392,12 +1469,12 @@ \msg_warning:nn { hyp }{ pdfversion-disabled } } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,verbose .legacy_if_set:n = {Hy@verbose} ,debug .legacy_if_set:n = {Hy@verbose} } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,draft .code:n = { @@ -1410,7 +1487,7 @@ \PassOptionsToPackage{final}{bookmark} } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,extension .tl_set:N = \XR@ext ,extension .initial:n= pdf @@ -1422,7 +1499,7 @@ ,plainpages .legacy_if_set:n = {Hy@plainpages} } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,linktoc .choices:nn = { none, section, all, page } { @@ -1443,12 +1520,12 @@ \prop_map_inline:Nn \c__hyp_map_hyp_annot_prop { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { ,#1 .bool_set:c = {l__hyp_annot_#2_bool} } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,baseurl .code:n = { @@ -2001,7 +2078,7 @@ } ,pdfwindowui .default:n = true } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,pdfview .code:n = { @@ -2083,7 +2160,7 @@ } ,pdfview .initial:n = {xyz} } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,pdflang .code:n = { @@ -2098,7 +2175,7 @@ \regex_set:Nn\l__hyp_optlang_regex {\A\[([A-Za-z\-]+)\](.*)} \cs_new_protected:Npn \__hyp_setup_info_key:nn #1 #2 { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { pdf#1 .code:n = { @@ -2178,7 +2255,7 @@ \__hyp_setup_info_key:nn {keywords} {Keywords} \cs_new_protected:Npn \__hyp_setup_info_date_key:nn #1 #2 { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { pdf#1 .code:n = { @@ -2211,16 +2288,16 @@ \__hyp_setup_info_date_key:nn {creationdate} {CreationDate} \__hyp_setup_info_date_key:nn {moddate} {ModDate} -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { pdfmetadate .code:n = { \__hyp_store_metadata:nn {pdfmetadate}{#1} } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { ,pdftrapped .code:n = { \exp_args:Nne - \keys_set:nn { hyp / setup } { _pdftrapped = \str_uppercase:n { #1 } } + \keys_set:nn { hyp } { _pdftrapped = \str_uppercase:n { #1 } } } ,_pdftrapped .choices:nn = {TRUE,FALSE,UNKNOWN} { @@ -2243,17 +2320,17 @@ { \exp_not:n {#1} } } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { pdfinfo .code:n = { \keys_set:nn { hyp / info } { #1 } } } -\keys_set:nn { hyp / setup} {pdfcreator = LaTeX~with~hyperref} -\keys_set:nn { hyp / setup} {pdfauthor = } -\keys_set:nn { hyp / setup} {pdftitle = } -\keys_set:nn { hyp / setup} {pdfsubject = } +\keys_set:nn { hyp} {pdfcreator = LaTeX~with~hyperref} +\keys_set:nn { hyp} {pdfauthor = } +\keys_set:nn { hyp} {pdftitle = } +\keys_set:nn { hyp} {pdfsubject = } \clist_map_inline:nn { ,pdfcopyright @@ -2295,13 +2372,13 @@ ,pdfdate } { - \keys_define:nn { hyp / setup } + \keys_define:nn { hyp } { #1 .code:n= { \__hyp_store_metadata:nn {#1}{##1}} } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { pdfpageduration .code:n = { @@ -2314,7 +2391,7 @@ } } } -\keys_define:nn { hyp / setup } +\keys_define:nn { hyp } { pdfpagetransition .code:n = { @@ -2402,7 +2479,7 @@ \exp_args:Nne\keys_set:nn {hyp/trans}{ style=\l_keys_key_str } } } -\keys_set_known:nv{hyp/setup}{opt@hyperref.sty} +\keys_set_known:nv{ hyp }{opt@hyperref.sty} %% Form field code \NewDocumentCommand \MakeFieldObject { m m } { diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvipdfmx.def b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvipdfmx.def index 8cf0f6fa6a7..665968106f3 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvipdfmx.def +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvipdfmx.def @@ -20,7 +20,7 @@ %% %% File: l3backend-testphase.dtx \ProvidesExplFile - {l3backend-testphase-dvipdfmx.def}{2023-11-17}{} + {l3backend-testphase-dvipdfmx.def}{2023-12-09}{} {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 } diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvips.def b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvips.def index 435bcfbd146..775cb2026c3 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvips.def +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvips.def @@ -20,7 +20,7 @@ %% %% File: l3backend-testphase.dtx \ProvidesExplFile - {l3backend-testphase-dvips.def}{2023-11-17}{} + {l3backend-testphase-dvips.def}{2023-12-09}{} {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 } diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvisvgm.def b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvisvgm.def index 0a2a47841ed..beaf28f8d70 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvisvgm.def +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvisvgm.def @@ -20,7 +20,7 @@ %% %% File: l3backend-testphase.dtx \ProvidesExplFile - {l3backend-testphase-dvisvgm.def}{2023-11-17}{} + {l3backend-testphase-dvisvgm.def}{2023-12-09}{} {LaTeX~PDF~management~testphase~bundle~backend~support: dvisvgm} \bool_if:NT \l__pdfmanagement_delayed_shipout_bool { diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-luatex.def b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-luatex.def index 13b00642c16..97a3d770744 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-luatex.def +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-luatex.def @@ -20,7 +20,7 @@ %% %% File: l3backend-testphase.dtx \ProvidesExplFile - {l3backend-testphase-luatex.def}{2023-11-17}{} + {l3backend-testphase-luatex.def}{2023-12-09}{} {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 diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-pdftex.def b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-pdftex.def index 77e53bb2307..7d1b4888f74 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-pdftex.def +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-pdftex.def @@ -20,7 +20,7 @@ %% %% File: l3backend-testphase.dtx \ProvidesExplFile - {l3backend-testphase-pdftex.def}{2023-11-17}{} + {l3backend-testphase-pdftex.def}{2023-12-09}{} {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 diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-xetex.def b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-xetex.def index ff3d9ad81d1..818dedfe55f 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-xetex.def +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-xetex.def @@ -20,7 +20,7 @@ %% %% File: l3backend-testphase.dtx \ProvidesExplFile - {l3backend-testphase-xetex.def}{2023-11-17}{} + {l3backend-testphase-xetex.def}{2023-12-09}{} {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 } diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3pdffield-testphase.sty b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3pdffield-testphase.sty index e9292fec3d9..8a3b62301df 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3pdffield-testphase.sty +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3pdffield-testphase.sty @@ -27,7 +27,7 @@ %% File: l3pdffield.dtx \NeedsTeXFormat{LaTeX2e} -\ProvidesExplPackage{l3pdffield-testphase}{2023-11-17}{0.96c}% +\ProvidesExplPackage{l3pdffield-testphase}{2023-12-09}{0.96d}% {form fields} \csname HyField@NeedAppearancesfalse\endcsname % suppress NeedAppearances \str_new:N \l__pdffield_tmpa_str diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-firstaid.sty b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-firstaid.sty index 4121a88af3e..7667a00eaf9 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-firstaid.sty +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-firstaid.sty @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: pdfmanagement-firstaid.dtx -\ProvidesExplPackage{pdfmanagement-firstaid}{2023-11-17}{0.96c} +\ProvidesExplPackage{pdfmanagement-firstaid}{2023-12-09}{0.96d} {LaTeX PDF management testphase bundle / firstaid-patches} \clist_map_inline:nn diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx index 00c59f51e7a..97502aef565 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx @@ -27,7 +27,7 @@ %% and all files in that bundle must be distributed together. %% %% File: pdfmanagement-testphase.dtx -\ProvidesExplFile{pdfmanagement-testphase.ltx}{2023-11-17}{0.96c} +\ProvidesExplFile{pdfmanagement-testphase.ltx}{2023-12-09}{0.96d} {PDF~management~code~(testphase)} \bool_new:N\l__pdfmanagement_delayed_shipout_bool \msg_new:nnn {pdfmanagement}{delayed-shipout} @@ -1081,7 +1081,8 @@ } } %% File: l3pdfannot.dtx -\RequirePackage{l3bitset} +\cs_if_exist:NF \bitset_new:Nn + { \RequirePackage { l3bitset } } \bitset_new:Nn \l_pdfannot_F_bitset { Invisible = 1, @@ -1764,7 +1765,7 @@ {\AddToDocumentProperties [document]{pdfstandard-X}{PDF/X-6p}}, _pdfstandard / UA-1 .code:n = { - \AddToDocumentProperties [document]{pdfstandard-UA}{{1}{2016}} + \AddToDocumentProperties [document]{pdfstandard-UA}{{1}{}} }, _pdfstandard / UA-2 .code:n = {\AddToDocumentProperties [document]{pdfstandard-UA}{{2}{2023}}}, @@ -2076,6 +2077,7 @@ \__pdfmeta_xmp_build_pdf: \__pdfmeta_xmp_build_xmpRights: \__pdfmeta_xmp_build_standards: %pdfaid,pdfxid,pdfuaid + \__pdfmeta_xmp_build_pdfd: \__pdfmeta_xmp_build_dc: \__pdfmeta_xmp_build_photoshop: \__pdfmeta_xmp_build_xmp: @@ -2358,6 +2360,64 @@ \__pdfmeta_xmp_add_packet_close:nn{rdf}{Seq} \__pdfmeta_xmp_add_packet_close:nn{pdfaSchema}{valueType} } +\cs_new_protected:Npn \__pdfmeta_xmp_schema_enable_pdfd: + { + \__pdfmeta_xmp_xmlns_new:ne {pdfd}{http://pdfa.org/declarations/} + \__pdfmeta_xmp_schema_new:nnn + {PDF~Declarations~Schema} + {pdfd} + {http://pdfa.org/declarations/} + \__pdfmeta_xmp_property_new:nnnnn + {pdfd} + {declarations} + {Bag~declaration} + {external} + {An~unordered~array~of~PDF~Declaration~entries,~where~each~PDF~Declaration~representing~a~statement~of~conformance~with~ an~identified~external~standard~or~profile,~along~with~optional~information~identifying~the~nature~of~the~claim.} + \cs_new_protected:cpn { __pdfmeta_xmp_schema_pdfd_additions: } + { + \__pdfmeta_xmp_add_packet_open:nn{pdfaSchema}{valueType} + \__pdfmeta_xmp_add_packet_open:nn{rdf}{Seq} + \__pdfmeta_xmp_add_packet_open_attr:nnn{rdf}{li}{rdf:parseType="Resource"} + \__pdfmeta_xmp_add_packet_line:nnn{pdfaType}{type}{claim} + \__pdfmeta_xmp_add_packet_line:nnn{pdfaType}{namespaceURI} + {http://pdfa.org/declarations/} + \__pdfmeta_xmp_add_packet_line:nnn{pdfaType}{prefix}{pdfd} + \__pdfmeta_xmp_add_packet_line:nnn{pdfaType}{description} + {A~structure~describing~properties~of~an~individual claim.} + \__pdfmeta_xmp_add_packet_open:nn{pdfaType}{field} + \__pdfmeta_xmp_add_packet_open:nn{rdf}{Seq} + \__pdfmeta_xmp_add_packet_field:nnn{claimReport}{Text} + {A~URL~to~a~report~containing~details~of~the~specific~conformance~claim.} + \__pdfmeta_xmp_add_packet_field:nnn{claimCredentials}{Text} + {The~claimant's~credentials.} + \__pdfmeta_xmp_add_packet_field:nnn{claimDate}{Text} + {A~date~identifying~when~the~claim~was~made.} + \__pdfmeta_xmp_add_packet_field:nnn{claimBy}{Text} + {The~name~of~the~organization~and/or~individual~and/or~software~making~the~claim.} + \__pdfmeta_xmp_add_packet_close:nn{rdf}{Seq} + \__pdfmeta_xmp_add_packet_close:nn{pdfaType}{field} + \__pdfmeta_xmp_add_packet_close:nn{rdf}{li} + \__pdfmeta_xmp_add_packet_open_attr:nnn{rdf}{li}{rdf:parseType="Resource"} + \__pdfmeta_xmp_add_packet_line:nnn{pdfaType}{type}{declaration} + \__pdfmeta_xmp_add_packet_line:nnn{pdfaType}{namespaceURI} + {http://pdfa.org/declarations/} + \__pdfmeta_xmp_add_packet_line:nnn{pdfaType}{prefix}{pdfd} + \__pdfmeta_xmp_add_packet_line:nnn{pdfaType}{description} + {A~structure~describing~a~single~PDF~ Declaration~asserting~conformance~with~ an~externally-identified~standard~or~ profile.} + \__pdfmeta_xmp_add_packet_open:nn{pdfaType}{field} + \__pdfmeta_xmp_add_packet_open:nn{rdf}{Seq} + \__pdfmeta_xmp_add_packet_field:nnn{conformsTo}{Text} + {A~property~containing~a~URI~specifying~the~standard~or~profile~by~the~PDF~Declaration.~This~property~is~ intended~to~mirror~the~Dublin~Core~property~dc:conformsTo.} + \__pdfmeta_xmp_add_packet_field:nnn{claimData}{Bag~claim} + {An~unordered~array~of~claim~data,~where~each~claim~identifies~the~nature~of~the~claim.} + \__pdfmeta_xmp_add_packet_close:nn{rdf}{Seq} + \__pdfmeta_xmp_add_packet_close:nn{pdfaType}{field} + \__pdfmeta_xmp_add_packet_close:nn{rdf}{li} + \__pdfmeta_xmp_add_packet_close:nn{rdf}{Seq} + \__pdfmeta_xmp_add_packet_close:nn{pdfaSchema}{valueType} + } + \cs_gset_eq:NN \__pdfmeta_xmp_schema_enable_pdfd: \prg_do_nothing: + } \cs_new_protected:Npn \__pdfmeta_xmp_build_pdf: { @@ -2406,7 +2466,35 @@ {pdfuaid}{rev}{\exp_last_unbraced:No\use_ii:nn \l__pdfmeta_tmpa_tl} } } - +\prop_new:N \g__pdfmeta_xmp_pdfd_data_prop +\cs_new_protected:Npn \__pdfmeta_xmp_build_pdfd: + { + \prop_if_empty:NF\g__pdfmeta_xmp_pdfd_data_prop + { + \__pdfmeta_xmp_add_packet_open:nn{pdfd}{declarations} + \__pdfmeta_xmp_add_packet_open:nn{rdf}{Bag} + \prop_map_inline:Nn \g__pdfmeta_xmp_pdfd_data_prop + { + \__pdfmeta_xmp_build_pdfd_claim:nn{##1}{##2} + } + \__pdfmeta_xmp_add_packet_close:nn{rdf}{Bag} + \__pdfmeta_xmp_add_packet_close:nn{pdfd}{declarations} + } + } +\cs_new_protected:Npn \__pdfmeta_xmp_build_pdfd_claim:nn #1#2 + { + \__pdfmeta_xmp_add_packet_open_attr:nnn{rdf}{li}{rdf:parseType="Resource"} + \__pdfmeta_xmp_add_packet_line:nnn{pdfd}{conformsTo}{#1} + \tl_if_empty:nF {#2} + { + \__pdfmeta_xmp_add_packet_open:nn{pdfd}{claimData} + \__pdfmeta_xmp_add_packet_open:nn{rdf}{Bag} + #2 + \__pdfmeta_xmp_add_packet_close:nn{rdf}{Bag} + \__pdfmeta_xmp_add_packet_close:nn{pdfd}{claimData} + } + \__pdfmeta_xmp_add_packet_close:nn{rdf}{li} + } \cs_new_protected:Npn \__pdfmeta_xmp_build_photoshop: { \__pdfmeta_xmp_add_packet_line:nne{photoshop}{AuthorsPosition} @@ -2630,6 +2718,35 @@ {\msg_warning:nnn{pdfmeta}{namespace-defined}{#1}} {\__pdfmeta_xmp_xmlns_new:nn {#1}{#2}} } +\cs_new_protected:Npn \pdfmeta_xmp_add_declaration:n #1 %conformsTo uri + { + \__pdfmeta_xmp_schema_enable_pdfd: + \prop_gput:Nnn\g__pdfmeta_xmp_pdfd_data_prop{#1}{} + } +\cs_generate_variant:Nn \pdfmeta_xmp_add_declaration:n {e} +\cs_new_protected:Npn \pdfmeta_xmp_add_declaration:nnnnn #1#2#3#4#5 + %#1=conformsTo uri, #2 claimBy, #3 claimDate #4 claimCredentials #4 claimReport + { + \__pdfmeta_xmp_schema_enable_pdfd: + \tl_set:Nn \l__pdfmeta_tmpa_tl + { + \__pdfmeta_xmp_add_packet_open_attr:nnn{rdf}{li}{rdf:parseType="Resource"} + \__pdfmeta_xmp_add_packet_line:nnn{pdfd}{claimBy}{#2} + \__pdfmeta_xmp_add_packet_line:nnn{pdfd}{claimDate}{#3} + \__pdfmeta_xmp_add_packet_line:nnn{pdfd}{claimCredentials}{#4} + \__pdfmeta_xmp_add_packet_line:nnn{pdfd}{claimReport}{#5} + \__pdfmeta_xmp_add_packet_close:nn{rdf}{li} + } + \prop_get:NnNT \g__pdfmeta_xmp_pdfd_data_prop {#1}\l__pdfmeta_tmpb_tl + { + \tl_concat:NNN \l__pdfmeta_tmpa_tl \l__pdfmeta_tmpa_tl \l__pdfmeta_tmpb_tl + } + \prop_gput:Nno\g__pdfmeta_xmp_pdfd_data_prop{#1} + { + \l__pdfmeta_tmpa_tl + } + } +\cs_generate_variant:Nn\pdfmeta_xmp_add_declaration:nnnnn {e} %% File: l3pdftools.dtx \cs_generate_variant:Nn \str_convert_pdfname:n { e } diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.sty b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.sty index 76775214b77..f8ba15a2e6a 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.sty +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.sty @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: pdfmanagement-testphase.dtx -\ProvidesExplPackage{pdfmanagement-testphase}{2023-11-17}{0.96c} +\ProvidesExplPackage{pdfmanagement-testphase}{2023-12-09}{0.96d} {LaTeX PDF management testphase bundle} \providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} \IfFormatAtLeastTF{2020-10-01}{}{ diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty index 98d5aaf4e91..a444924dfd5 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty @@ -1,6 +1,6 @@ %% LaTeX2e file `xcolor-patches-tmp-ltx.sty' %% -\ProvidesPackage{xcolor-patches-tmp-ltx}[2023-11-17 v0.96c patch xcolor for l3color] +\ProvidesPackage{xcolor-patches-tmp-ltx}[2023-12-09 v0.96d patch xcolor for l3color] \@ifundefined{color_set:nn}{\RequirePackage{l3color}}{} \ExplSyntaxOn -- cgit v1.2.3