From be4efcdb2f47821698dc8dbde89722b4f0c2e4b0 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Fri, 4 Nov 2022 03:01:54 +0000 Subject: CTAN sync 202211040301 --- .../contrib/pdfmanagement-testphase/ltdocinit.dtx | 416 ++++++--------------- 1 file changed, 109 insertions(+), 307 deletions(-) (limited to 'macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx') diff --git a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx index 0142b337b6..8456882f17 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx @@ -47,49 +47,15 @@ % }^^A % } % -% \date{Version 0.95s, released 2022-09-26} +% \date{Version 0.95t, released 2022-11-03} % % \maketitle % \begin{documentation} % % \section{\pkg{ltdocinit} documentation} -% This small module defines \cs{DocumentMetadata} and the older alias -% \cs{DeclareDocumentMetadata} and the related keys. -% It also defines commands to store document properties in a global container. -% -% When the kernel will provide \cs{DocumentMetadata} directly -% this module will slowly disappear. -% -% \subsection{\cs{DocumentMetadata}/\cs{DeclareDocumentMetadata}} -% -% \begin{function}{\DocumentMetadata,\DeclareDocumentMetadata} -% \begin{syntax} -% \cs{DocumentMetadata}\Arg{key-value list}\\ -% \cs{DeclareDocumentMetadata}\Arg{key-value list} (deprecated) -% \end{syntax} -% \end{function} -% -% Currently there is no dedicated location to declare settings concerning -% a document as a whole. Settings are placed somewhere in the preamble or -% with the class options or even with some package options. -% For some settings this can be too late, -% for example the pdf version can no longer be changed if a -% package has used code which already opened the PDF. -% -% \cs{DocumentMetadata} as a new command -% should unify such settings in one place. -% It should be used before \cs{documentclass}. -% \cs{DocumentMetadata} can be used more than once. -% -% With a \LaTeX{} 2022-06-01 or newer (currently provided as |latex-dev|) the command -% is provided by the kernel and will load the pdfmanagement, -% with older \LaTeX{} the pdfmanagement must be loaded -% first manually with |\RequirePackage{pdfmanagement-testphase}|. -% -% The keys defined for \cs{DocumentMetadata} -% currently allows to set the PDF version, to set the PDF \texttt{/Lang}, -% to uncompress a pdf, to set the language and to declare a few PDF standards -% and to load some colorprofiles. +% This small module defined \cs{DocumentMetadata} but the definition +% has been moved to latex-lab. The documentation can be found in +% \texttt{documentmetadata-support-doc-.pdf} % % \cs{DocumentMetadata} is also used to % activate the new PDF management code and it loads @@ -98,56 +64,68 @@ % which can't be detected automatically like |dvipdfmx|, % must be set in the first \cs{DocumentMetadata}. % -% Currently the following keys are implemented +% +% Here only a few newer keys are defined and the older \cs{DeclareDocumentMetadata} +% is provided. % -% \begin{description} -% \item[\texttt{backend}] Passes the backend name to expl3. This is -% needed only if the needed backend can't be automatically -% determined or if the workflow used requires a special backend. +% The module also defines commands to store document properties in a global container. % -%^^A This will probably be extended to pass the value also to -%^^A packages. +% This module will slowly disappear. +% +% \subsection{\cs{DocumentMetadata}/\cs{DeclareDocumentMetadata}} % -% \item[\texttt{pdfversion}] Sets the PDF version explicitly, e.g., \texttt{pdfversion=1.7} -% \item[\texttt{uncompress}] (no value) Forces an uncompressed pdf -% --- mainly for debugging purposes. +% \begin{function}{\DeclareDocumentMetadata} +% \begin{syntax} +% \cs{DeclareDocumentMetadata}\Arg{key-value list} (deprecated) +% \end{syntax} +% This is an older alias for \cs{DocumentMetadata} +% \end{function} % -% \item[\texttt{lang}] Explicitly sets the Lang entry in the Catalog, -% e.g., \texttt{lang=de-DE}. If not given the default value used is |en-US|. +% Additionally to the keys described in \texttt{documentmetadata-support-doc-.pdf} +% the following keys/values are implemented +% +% \begin{description} % % \item[\texttt{pdfstandard}] Choice key to set the pdf standard. -% Currently |A-1b|, |A-2a|, |A-2b|, |A-2u|, |A-3a|, |A-3b|, |A-3u| and |A-4| -% are accepted as -% values. The casing is irrelevant, |a-1b| works too. -% The underlying code to ensure the requirements (as far as they -% can be ensured) is still incomplete, but a color profile is included and the -% \texttt{/OutputIntent} is set. The |u| variants for example do not force unicode, -% but they will pass the information to hyperref and hyperxmp. The |a| variants +% +% Starting with version 0.95s it is also possible to use the values +% |X-4|, |X-4p|, |X-5g|, |X-5n|, |X-5pg|, |X-6|, |X-6n|, |X-6p|, |UA-1| for +% a PDF/X and PDF/UA standard. These keys set \emph{only} the relevant +% XMP-metadata. +% +% Beside this |A-1b|, |A-2a|, |A-2b|, |A-2u|, |A-3a|, |A-3b|, |A-3u| and |A-4| +% are accepted as values for A-standards. The casing is irrelevant, |a-1b| works too. +% Note that using these +% key doesn't mean that the document actually follows the standard. \LaTeX{} +% can neither ensure nor check all requirements of a standard, and not everything +% it can do theoretically has already been implemented. +% For A-standard a color profile is included and the +% \texttt{/OutputIntent} is set and javascript action in hyperref are suppressed. +% The |u| variants do not force unicode, +% but they will pass the information to hyperref. The |a| variants % do \emph{not} enforce (or even test) a tagged pdf yet. % More information can be found in the documentation % of \pkg{l3pdfmeta}. % -% \item[\texttt{colorprofiles}] This allows to load icc-colorprofiles. Details -% are described in the documentation of \pkg{l3pdfmeta}. +% |pdfstandard| can be used more than once to set overlapping standards, e.g:\\ +% |pdfstandard=A-2b,pdfstandard=X-4,pdfstandard=UA-1| % % \item[\texttt{xmp}] A boolean, if set to false no XMP metadata are added to the PDF. % The default is true. Details are described in the documentation of \pkg{l3pdfmeta}. % % \item[\texttt{testphase}] This key is used to load testphase code. The values it accepts % and their effect will change over time, when testphase packages are added or -% removed or when the code is moved into the kernel. +% removed or when the code is moved into the kernel. New value here are % \begin{description} -% \item[\texttt{phase-I}] -% This value loads code implementing the first phase of the project~\cite{blueprint}, i.e., it -% will load the tagpdf package. It will also activate tagging by issuing -% |\tagpdfsetup{activate,interwordspace}|. This phase -% is frozen. -% \item[\texttt{phase-II}] -% This is the current development phase. -% Currently it differs from \texttt{phase-I} only in one point: It will -% additionally activate tagging of paragraphs with -% |\tagpdfsetup{paratagging}|. In the upcoming months it will -% also enable automatic tagging of other basic document elements. +% \item[\texttt{new-or-1}] This patches a few commands related +% to the output routing. They are needed for the tagging +% of paragraphs, for the tagging of header and footer and +% to allow the PDF management to insert code which avoids that +% links happening at page breaks spills into the header and footer. +% This code is also loaded be the following values. +% \item[\texttt{new-or}] This loads more changes to the output routine required for the +% tagging. It is not compatible with every class! The code is also loaded by the +% \texttt{phase-II} value. % \end{description} % The |testphase| key can only be used in the first \cs{DocumentMetadata}. % @@ -159,6 +137,7 @@ % \item[\texttt{log}] with the values as described in the documentation \pkg{tagpdf}, % \item[\texttt{uncompress}] which does the same as |uncompress| as main key % \item[\texttt{pdfmanagement}] a boolean which allows to deactivate the pdfmanagement. +% This should only be done for debugging! % \item[\texttt{firstaidoff}] This accepts a comma lists of keywords and disables the patches % related to them. More information can be found in the documentation of % \pkg{pdfmanagement-firstaid}. @@ -184,9 +163,10 @@ % using the container. The label |document| is reserved. % \end{function} % -% \begin{function}{\GetDocumentProperties} +% \begin{function}[updated=2022-10-09]{\GetDocumentProperties,\pdfmanagement_get_documentproperties:n} % \begin{syntax} -% \cs{GetDocumentProperties}\Arg{label/property} +% \cs{GetDocumentProperties}\Arg{label/property}\\ +% \cs{pdfmanagement_get_documentproperties:n}\Arg{label/property} % \end{syntax} % Expands to the \meta{value} corresponding to \meta{label/property} % in the container. If \meta{label/property} is missing, @@ -196,6 +176,22 @@ % when appearing in an x-type argument expansion. % \end{function} % +% \begin{function}[added=2022-10-09,TF]{\pdfmanagement_get_documentproperties:nN} +% \begin{syntax} +% \cs{pdfmanagement_get_documentproperties:nNTF}\Arg{label/property} \meta{token list variable}\\ +% ~~~~ \Arg{true code} \Arg{false code} +% \end{syntax} +% If the \meta{label/property} is not present in the document properties +% container, leaves the \meta{false code} in the input stream. +% The value of the +% \meta{token list variable} is not defined in this case and should +% not be relied upon. If the \meta{label/property} is present in the +% container, stores the corresponding \meta{value} in the +% \meta{token list variable} without removing it from the +% container, then leaves the \meta{true code} in the input +% stream. The \meta{token list variable} is assigned locally. +% \end{function} +% % \begin{function}{\ShowDocumentProperties} % \begin{syntax} % \cs{ShowDocumentProperties} @@ -219,7 +215,7 @@ % \begin{macrocode} %<@@=pdfmanagement> %<*header> -\ProvidesExplPackage{ltdocinit}{2022-09-26}{0.95s} +\ProvidesExplPackage{ltdocinit}{2022-11-03}{0.95t} {Initialize document metadata} % % \end{macrocode} @@ -244,248 +240,27 @@ % \end{macrocode} % \end{variable} % \begin{macrocode} -\cs_if_free:NT \DocumentMetadata +\keys_define:nn { document / metadata } { - \keys_define:nn { document / metadata } + ,testphase / new-or-1 .code:n = { - backend .choices:nn = - { dvipdfmx , dvips , dvisvgm , luatex , pdftex , pdfmode , xdvipdfmx , xetex } - { - \sys_load_backend:n {#1} - }, - backend .groups:n = { init } , - } - - \keys_define:nn { document / metadata } - { - ,pdfversion .code:n = - { - \pdf_version_gset:n { #1 } - \AddToDocumentProperties[document]{pdfversion}{#1} - } - ,uncompress .code:n = - { - \pdf_uncompress: - } - ,uncompress .value_forbidden:n = true - ,lang .code:n = - { - \pdfmanagement_add:nnn {Catalog} {Lang}{(#1)} - \AddToDocumentProperties[document]{lang}{#1} - } - %,xmpmeta .bool_gset:N = \g_pdfmeta_xmp_bool %see pdfmeta unused and undefined for now! - % this uses internal command from pdfmeta, it should probably move there ... - ,pdfstandard .code:n = - { - \exp_args:Nnx - \keys_set:nn {document / metadata} {_pdfstandard=\str_uppercase:n{#1}} - } - ,_pdfstandard .choices:nn = - {A-1B,A-2A,A-2B,A-2U,A-3A,A-3B,A-3U,A-4} - { - \prop_if_exist:cT { g__pdfmeta_standard_pdf/#1_prop } - { - \prop_gset_eq:Nc \g__pdfmeta_standard_prop { g__pdfmeta_standard_pdf/#1 _prop } - } - \AddToDocumentProperties [document]{pdfstandard}{#1} - } - ,_pdfstandard / unknown .code:n = - { - \msg_warning:nnn{pdf}{unknown-standard}{#1} - } - ,testphase .multichoice: - ,testphase / tagpdf .code:n = - { - \tl_gput_right:Nn\g_@@_testphase_tl - { - \file_if_exist_input:nF {tagpdf-latex-lab-testphase.ltx} - { - \RequirePackage{tagpdf} - \AddToDocumentProperties [document]{testphase/tagpdf}{loaded} - \tagpdfsetup{activate,paratagging,interwordspace} - \AddToDocumentProperties [document]{tagging}{active} - \AddToDocumentProperties [document]{tagging/para}{active} - \AddToDocumentProperties [document]{tagging/interwordspace}{active} - } - } - } - ,testphase / unknown .code:n = - { - \tl_gput_right:Nn\g_@@_testphase_tl + \tl_gput_right:Nn\g_@@_testphase_tl + { + \file_if_exist_input:nF {new-or-1-latex-lab-testphase.ltx} { - \AddToDocumentProperties [document]{testphase/#1}{loaded} - \file_if_exist_input:nF {#1-latex-lab-testphase.ltx} - { - \msg_warning:nnn{document}{latex-lab-pkg-missing}{#1} - \AddToDocumentProperties [document]{testphase/#1}{missing} - } + \RequirePackage{output-patches-tmp-ltx} } - } - ,activate .multichoice: - ,activate / tagging .code:n = - { - \PackageWarning{pdfmanagement-testphase} - {The~activate~key~is~deprecated.\MessageBreak - Tagging~is~activated~with~'testphase=tagpdf'~directly}{} - } - ,debug .code:n = - { - \keys_set:nn { document / metadata / debug } {#1} - } - ,debug / para .code:n = - { - \AddToHook - { - package/tagpdf/after - } - { - \tagpdfsetup{paratagging-show} - } - } - ,debug / log .code:n = - { - \AddToHook - { - package/tagpdf/after - } - { - \tagpdfsetup{log=#1} - } - } - ,debug / uncompress .code:n = - { - \pdf_uncompress: - } - ,debug / pdfmanagement .bool_gset:N = \g_@@_active_bool - ,debug / firstaidoff .clist_gset:N = \g_@@_firstaidoff_clist + } } - } + } % \end{macrocode} % -% \subsection{\cs{DocumentMetadata}/\cs{DeclareDocumentMetadata}} -% At first we have to define the older alias \cs{DeclareDocumentMetadata} if -% \cs{DocumentMetadata} is already defined in a newer LaTeX version. Here -% we load the latex-lab support (if it hasn't been loaded -% before) and redefine then \cs{DeclareDocumentMetadata} -% to \cs{DocumentMetadata} +% \subsection{\cs{DeclareDocumentMetadata}} +% We define the older alias \cs{DeclareDocumentMetadata} % +% \begin{macro}{\DeclareDocumentMetadata} % \begin{macrocode} -\cs_if_exist:NT \DocumentMetadata - { - \cs_new_protected:Npn \DeclareDocumentMetadata - { - \cs_if_free:NT \DocumentMetadata - { - \file_if_exist_input:nF {documentmetadata-support.ltx}% - { - \@latex@error - {No~support~files~for~\noexpand\DeclareDocumentMetadata~found} - { - Is~the~'LaTeX-lab'~bundle~installed? - \MessageBreak - Without~it,~the~declaration~is~ignored. - } - \let\DeclareDocumentMetadata\@gobble - } - } - \RenewDocumentCommand \DeclareDocumentMetadata {} - { \DocumentMetadata } - \DocumentMetadata - } - } -% \end{macrocode} -% Now we provide a definition for \cs{DocumentMetadata} if it doesn't exist yet. -% \begin{macrocode} -\cs_if_free:NT \DocumentMetadata - { -% \end{macrocode} -% \cs{DocumentMetadata} should for now not be used after -% \cs{documentclass} so we error in this case. It can be used more than once -% but follow-up calls should not do the initialization code. -% \begin{macrocode} - \prop_gput:Nnn \g_msg_module_type_prop { document } { LaTeX } - \prop_gput:Nnn \g_msg_module_name_prop { document } { DocumentMetadata } - \msg_new:nnn - { document } { setup-after-documentclass } - { - \token_to_str:N \DocumentMetadata \c_space_tl - should~be~used~only~before~\token_to_str:N\documentclass - } - \msg_new:nnn - { document } { latex-lab-pkg-missing } - { - LaTeX-lab~package~'#1'~not~found. - } -% \end{macrocode} -% \begin{macro}{\DocumentMetadata} -% \begin{macrocode} - \NewDocumentCommand\DocumentMetadata { m } - { - \cs_if_eq:NNTF \documentclass \@twoclasseserror - { \msg_error:nn { document }{ setup-after-documentclass } } - { -% \end{macrocode} -% The wanted backend must be detected first, we read the init key and then -% force the loading by loading expl3. -% The backend can contains management commands, so the boolean should be set to true first. -% \begin{macrocode} - \bool_gset_true:N \g_@@_active_bool - \keys_set_groups:nnn { document / metadata} {init}{ #1 } - %if no backend has been loaded force it now: - \str_if_exist:NF \c_sys_backend_str - { - \sys_load_backend:n {} - } -% \end{macrocode} -% Now we load the extra backend code -% \begin{macrocode} - \ExplSyntaxOn\makeatletter - \file_input:n {l3backend-testphase-\c_sys_backend_str.def} - \ExplSyntaxOff\makeatother -% \end{macrocode} -% set the default language, process the rest of the keys, -% and setup the generic driver -% \begin{macrocode} - \keys_set_filter:nnn { document / metadata } { init } { lang=en-US, #1 } - \bool_if:NT \g_@@_active_bool - { - \PassOptionsToPackage{customdriver=hgeneric-testphase}{hyperref} - } -% \end{macrocode} -% \cs{pdfmanagement_add:nnn} has collected values in this hook. -% \begin{macrocode} - \hook_use_once:n {pdfmanagement/add} -% \end{macrocode} -% Redefine \cs{DocumentMetadata} so that it only process the keys. -% We need to update the hyperref option if the active status changes. -% \begin{macrocode} - \RenewDocumentCommand\DocumentMetadata { m } - { - \keys_set_filter:nnn { document / metadata } { init } { ##1 } - \bool_if:NTF \g_@@_active_bool - { - \str_remove_all:cn - {opt@hyperref.sty}{customdriver=hgeneric-testphase} - \PassOptionsToPackage - {customdriver=hgeneric-testphase}{hyperref} - } - { - \str_remove_all:cn - {opt@hyperref.sty}{customdriver=hgeneric-testphase} - } - } -% \end{macrocode} -% Load more modules, the testphase code and the firstaid code. -% \begin{macrocode} - \g_@@_testphase_tl - \RequirePackage{pdfmanagement-firstaid} - } - } -% \end{macrocode} -% At last we need to provide the older alias here too -% \begin{macrocode} - \NewDocumentCommand\DeclareDocumentMetadata{}{\DocumentMetadata} - } +\NewCommandCopy\DeclareDocumentMetadata\DocumentMetadata % \end{macrocode} % \end{macro} % @@ -517,6 +292,33 @@ } % \end{macrocode} % \end{macro} +% For uses in modules (e.g. l3pdfmeta) +% we provide an expl3 version without the xparse overhead: +% +% \begin{macro}[EXP]{\pdfmanagement_get_documentproperties:n} +% \begin{macrocode} +\cs_new:Npn\pdfmanagement_get_documentproperties:n #1 + { + \prop_item:Nn \g_@@_documentproperties_prop {#1} + } +% \end{macrocode} +% \end{macro} +% The following allows to retrieve the values with branching. +% \begin{macro}[added=2022-10-09]{\pdfmanagement_get_documentproperties:nNTF} +% \begin{macrocode} +\prg_new_protected_conditional:Npnn + \pdfmanagement_get_documentproperties:nN #1#2 { T , F , TF } + { + \prop_get:NnNTF \g_@@_documentproperties_prop {#1} #2 + { + \prg_return_true: + } + { + \prg_return_false: + } + } +% \end{macrocode} +% \end{macro} % \begin{macro}{\ShowDocumentProperties} % \begin{macrocode} \msg_new:nnn { pdfmanagement } { show-properties } -- cgit v1.2.3