[latex3-commits] [git/LaTeX3-latex3-pdfresources] verify: move verify functions and use in hyperref (724ba82)
Ulrike Fischer
fischer at troubleshooting-tex.de
Wed Feb 17 19:13:02 CET 2021
Repository : https://github.com/latex3/pdfresources
On branch : verify
Link : https://github.com/latex3/pdfresources/commit/724ba827fb968fdb20a3d81a84aca440b962c3a1
>---------------------------------------------------------------
commit 724ba827fb968fdb20a3d81a84aca440b962c3a1
Author: Ulrike Fischer <fischer at troubleshooting-tex.de>
Date: Wed Feb 17 19:13:02 2021 +0100
move verify functions and use in hyperref
>---------------------------------------------------------------
724ba827fb968fdb20a3d81a84aca440b962c3a1
experiments/verify.tex | 10 +-
hyperref-generic.dtx | 58 ++++----
l3pdfmeta.dtx | 355 ++++++++++++++++++++++++++++++++++++++++---------
3 files changed, 318 insertions(+), 105 deletions(-)
diff --git a/experiments/verify.tex b/experiments/verify.tex
index 87b02a1..629559c 100644
--- a/experiments/verify.tex
+++ b/experiments/verify.tex
@@ -101,7 +101,7 @@
\ExplSyntaxOff
\begin{document}
-\section{Verifying standard requirements}
+\subsection{Verifying standard requirements}
Standards like pdf/A set requirements on a PDF: Some things have be in the PDF, e.g. the catalog has to contain a /Lang entry and an colorprofile and an /OutputIntent, some other things are forbidden or restricted, e.g. the action dictionary of an annotation should not contain Javascript.
@@ -164,7 +164,7 @@ If the \meta{requirement} is not found the special value |\q_no_value| is used.
The following describe the requirements which can be currently tested. Requirements with a value should use \cs{pdfmeta_standard_verify:nn} or \cs{pdfmeta_standard_verify:nnN} to test a local value against the standard.
The rule numbers refer to \url{https://docs.verapdf.org/validation/pdfa-part1/}
-\subsection{Simple tests without handler}
+\subsubsection{Simple tests without handler}
\begin{description}
@@ -184,7 +184,7 @@ The rule numbers refer to \url{https://docs.verapdf.org/validation/pdfa-part1/}
\item[|form_no_AA|] (6.9-3) no /AA dictionary in form field
\end{description}
-\subsection{Tests with values and special handlers}
+\subsubsection{Tests with values and special handlers}
\begin{description}
@@ -195,10 +195,10 @@ The rule numbers refer to \url{https://docs.verapdf.org/validation/pdfa-part1/}
\item[|outputintent_subtype|] this requirement stores allowed names for the /Outputintent subtype like |GTS_PDFA1|.
This value is typically only read.
\item[|named_actions|] this requirement restricts the list of allowed named actions to |NextPage|, |PrevPage|, |FirstPage|, |LastPage|.
-The check should supply the named action without slash (e.g. |View|).
+The check should supply the named action without slash (e.g. |View| (failure) or |NextPage| (pass)).
\item[|annot_action_A|] (rule 6.6.1-1) this requirement restricts the allowed subtypes of the
-/A dictionary of an action. The check should supply the user subtype without slash e.g. as |GoTo| or |Movie|.
+/A dictionary of an action. The check should supply the user subtype without slash e.g. as |GoTo| (pass) or |Movie| (failure).
\end{description}
diff --git a/hyperref-generic.dtx b/hyperref-generic.dtx
index f35aa59..900b078 100644
--- a/hyperref-generic.dtx
+++ b/hyperref-generic.dtx
@@ -1940,15 +1940,7 @@
\bool_if:NTF \l_@@_annot_Named_bool
{
\group_begin:
- \bool_set_true:N\l_tmpa_bool
- \prop_get:NnNT \g_pdfmeta_standard_prop {named_actions} \l_@@_tmpa_tl
- {
- \tl_if_in:NnF \l_@@_tmpa_tl {#1}
- {
- \bool_set_false:N\l_tmpa_bool
- }
- }
- \bool_if:NTF \l_tmpa_bool
+ \pdfmeta_standard_verify:nnTF {named_actions}{#1}
{
\mode_leave_vertical:
\pdfdict_put:nnx {l_hyp/annot/A/Named}{N}
@@ -3896,16 +3888,16 @@
{Helv} {\pdf_object_ref:n {l_@@_font_helvetica_obj} }
\pdfmanagement_add:nnx {Catalog /AcroForm}
{DA}{(/Helv~10~Tf~0~g)}
- \prop_if_in:NnTF\g_pdfmeta_standard_prop {form_no_NeedAppearance}
- {
- \pdfmanagement_remove:nn {Catalog / AcroForm }{NeedAppearances}
- }
+ \pdfmeta_standard_verify:nTF {form_no_NeedAppearance}
{
\legacy_if:nT { HyField at NeedAppearances }
{
\pdfmanagement_add:nnn {Catalog / AcroForm }{NeedAppearances}{true}
}
}
+ {
+ \pdfmanagement_remove:nn {Catalog / AcroForm }{NeedAppearances}
+ }
}
\MakeFieldObject
{
@@ -4166,15 +4158,7 @@
\DefaultOptionsofPushButton,#1
}
\PDFForm at Name
- \prop_if_in:NnTF \g_pdfmeta_standard_prop {annot_action_no_A}
- {
- \msg_error:nn { hyp }{ pdfa-no-push-button }
- \LayoutPushButtonField
- {
- \mode_leave_vertical:
- \MakeButtonField{#2}
- }
- }
+ \pdfmeta_standard_verify:nnTF {annot_action_A}{JavaScript}
{
\HyField at FlagsPushButton
\legacy_if:nT {Fld at hidden}
@@ -4195,7 +4179,15 @@
{\box_use:N\l_tmpa_box}
\HyField at AddToFields
}
- }
+ }
+ {
+ \msg_error:nn { hyp }{ pdfa-no-push-button }
+ \LayoutPushButtonField
+ {
+ \mode_leave_vertical:
+ \MakeButtonField{#2}
+ }
+ }
\group_end:
}
@@ -4245,11 +4237,7 @@
\DefaultOptionsofReset,#1
}
\mode_leave_vertical:
- \prop_if_in:NnTF \g_pdfmeta_standard_prop {annot_action_no_A}
- {
- \msg_error:nn { hyp }{ pdfa-no-reset-button }
- \MakeButtonField{#2}
- }
+ \pdfmeta_standard_verify:nnTF {annot_action_A}{ResetForm}
{
\HyField at FlagsPushButton
\legacy_if:nT { Fld at hidden }
@@ -4265,6 +4253,10 @@
\HyField at AddToFields
\box_use:N \l_tmpa_box
}
+ {
+ \msg_error:nn { hyp }{ pdfa-no-reset-button }
+ \MakeButtonField{#2}
+ }
\group_end:
}
@@ -4479,7 +4471,7 @@
{%
\exp_args:Ne\str_if_eq:nnF {\Fld at X@additionalactions}{}
{
- \prop_if_in:NnF \g_pdfmeta_standard_prop {annot_widget_no_AA}
+ \pdfmeta_standard_verify:nT {annot_widget_no_AA}
{/AA<<\Fld at X@additionalactions>>}
}
}
@@ -4549,8 +4541,6 @@
}
\ExplSyntaxOff
\ExplSyntaxOn
-\prop_if_in:NnF \g_pdfmeta_standard_prop {annot_action_no_A}
- {
\def\PDFForm at Push
{
/Subtype/Widget
@@ -4583,7 +4573,7 @@
/A<</S/JavaScript/JS(\Hy at escapestring{\Fld at onclick@code})>>
\Fld at additionalactions
}
- }
+
\ExplSyntaxOff
\def\PDFForm at List{%
/Subtype/Widget%
@@ -4744,8 +4734,6 @@
\Fld at additionalactions
}
\ExplSyntaxOn
-\prop_if_in:NnF \g_pdfmeta_standard_prop {annot_action_no_A}
- {
\def\PDFForm at Reset{%
/Subtype/Widget%
\Fld at annotflags
@@ -4774,7 +4762,7 @@
/A<</S/ResetForm>>%
\Fld at additionalactions
}%
- }
+
%these patterns are used in hyperref checks.
%it is unclear if they are really useful and if a backend support is
diff --git a/l3pdfmeta.dtx b/l3pdfmeta.dtx
index ef61e20..fda9e74 100644
--- a/l3pdfmeta.dtx
+++ b/l3pdfmeta.dtx
@@ -74,24 +74,157 @@
% \item how interface to input data should look
% \end{itemize}
% \end{NOTE}
-% \begin{variable}{\g_pdfmeta_standard_prop}
-% This public property is filled with the requirements of the requested standard(s).
-% packages wanting to test a requirement can query the variable. For some of the values
-% it also makes sense to change them. Currently this is only relevant for the colorprofile:
-% With one of the pdf/A standards a colorprofile is embedded and added to the /OutputIntent.
-% The default value is sRGB.icc, this can be changed
-% by setting the key |outputintent_profile|. Currently the only alternative is
-% |FOGRA39L_coated.icc|. Interfaces to add more colorprofiles will be added later.
-% \end{variable}
%
-% \begin{variable}
-% {
-% \g_pdfmeta_standard_pdf/A-1b_prop ,
-% \g_pdfmeta_standard_pdf/A-2b_prop,
-% \g_pdfmeta_standard_pdf/A-3b_prop
-% }
-% These three properties contain the settings for the three pdf/A-standards.
-% \end{variable}
+% \subsection{Verifying requirements of PDF standards}
+%
+% Standards like pdf/A set requirements on a PDF: Some things have be in the PDF,
+% e.g. the catalog has to contain a /Lang entry and an colorprofile and
+% an /OutputIntent, some other things are forbidden or restricted, e.g.
+% the action dictionary of an annotation should not contain Javascript.
+%
+% The \pkg{l3pdfmeta} packages collects a number of relevant requirements,
+% tries to enforce the ones which can be enforced and offers some tools
+% for package authors to test if an action is allowed in the standard or not.
+%
+% This is work in progress and more tests will be added. But it should be noted
+% that it will probably never be possible to prevent all forbidden actions
+% or enforce all required ones or even to simply check all of them.
+% The commands here don't replace a check with an external validator.
+%
+% Verifying against a PDF-standard involves two different task:
+%
+% \begin{itemize}
+% \item Check if you are allowed to ignore the requirement.
+% \item Decide which action to take if the answer to the first question is NO.
+% \end{itemize}
+%
+% The following conditionals address the first task. Because of the second task
+% a return value |FALSE| means that the standard requires you to do some
+% special action. |TRUE| means that you can ignore this
+% requirement.\footnote{One could also make the logic the
+% other way round---there are arguments for both---but I had to decide.}
+%
+% In most cases it only matters if a requirement is in the standard,
+% for example |Catalog_no_OCProperties| means \enquote{don't use |/OCProperties|
+% in the catalog}. For a small number of requirements it is also needed to
+% test a user value against a standard value. For example, |named_actions|
+% restricts the allowed named actions in an annotation of subtype |/Named|,
+% in this case it is needed to check not only if the requirement is
+% in the standard but also if the user value is in the allowed list.
+%
+% \begin{function}[EXP,pTF]{\pdfmeta_standard_verify:n}
+% \begin{syntax}
+% \cs{pdfmeta_standard_verify:n}\Arg{requirement}
+% \end{syntax}
+%
+% This checks if \meta{requirement} is listed in the standard.
+% |FALSE| as result means that the requirement is in the standard and
+% that probably some special action is required---which one depends
+% on the requirement, see the descriptions below.
+% |TRUE| means that the requirement is not there and so no special
+% action is needed.
+% This check can be used for simple requirements where neither
+% a user nor a standard value is of importance.
+% \end{function}
+%
+% \begin{function}[TF]{\pdfmeta_standard_verify:nn}
+% \begin{syntax}
+% \cs{pdfmeta_standard_verify:nn}\Arg{requirement}\Arg{value}
+% \end{syntax}
+%
+% This checks if \meta{requirement} is listed in the standard,
+% if yes it tries to find a predefined test handler for
+% the requirement and passes \meta{value} and the value recorded
+% in the standard to it. The handler returns |FALSE| if some special
+% action is needed (e.g. if \meta{value} violates the rule)
+% and |TRUE| if no special action is needed. If no handler exists
+% this commands works like \cs{pdfmeta_standard_verify:n}.
+% \end{function}
+%
+% In some cases one needs to query the value in the standard,
+% e.g. to correct a wrong minimal PDF version you need to know
+% which version is required by |min_pdf_version|.
+% For this two commands to access the value are provided:
+%
+% \begin{function}[EXP]{\pdfmeta_standard_item:n}
+% \begin{syntax}
+% \cs{pdfmeta_standard_item:n}\Arg{requirement}
+% \end{syntax}
+% This retrieves the value of \meta{requirement} and leaves it in the input.
+% If the requirement isn't in the standard the result is empty,
+% that means that requirements not in the standard and
+% requirement without values can not be distinguished here.
+% \end{function}
+%
+%
+% \begin{function}{\pdfmeta_standard_get:nN}
+% \begin{syntax}
+% \cs{pdfmeta_standard_get:nN}\Arg{requirement} \meta{tl var}
+% \end{syntax}
+% This retrieves the value of \meta{requirement} and stores
+% it in the \meta{token list variable}.
+% If the \meta{requirement} is not found the special
+% value |\q_no_value| is used.
+% The \meta{token list variable} is assigned locally.
+% \end{function}
+%
+%
+% The following describe the requirements which can be currently tested.
+% Requirements with a value should use \cs{pdfmeta_standard_verify:nn}
+% or \cs{pdfmeta_standard_verify:nnN} to test a local value against the standard.
+% The rule numbers refer to \url{https://docs.verapdf.org/validation/pdfa-part1/}
+%
+% \subsubsection{Simple tests without handler}
+%
+% \begin{description}
+%
+% \item[|outputintent|] requires to embed a color profile and
+% reference it in a /Outputintent.
+% {\em This requirement is detected and fulfilled by \pkg{l3pdfmeta}, see below}.
+%
+% \item[|annot_flags|] in annotations the |Print| flag should be true,
+% |Hidden|, |Invisible|, |NoView| should be false.
+% {\em This requirement is detected and set by \pkg{l3pdfmeta} for annotations
+% created with the \pkg{l3pdfannot}.
+% A new check is only needed if the flags are changed
+% or if links are created by other means.}
+%
+% \item[|no_encryption|] don't encrypt
+% \item[|no_external_content|] no |/F|, |/FFilter|, or |/FDecodeParms|
+% in stream dictionaries
+% \item[|no_embed_content|] no |/EF| key in filespec, no |/Type/EmbeddedFiles|
+% (this will be checked in future by \pkg{l3pdffiles} for the files it inserts.)
+% \item[|Catalog_no_OCProperties|] don't add |/OCProperties| to the catalog
+% {\em l3pdfmeta removes this entry at the end of the document}
+% \item[|annot_widget_no_AA|] (rule 6.6.2-1)
+% no AA dictionary in widget annotation,
+% this will e.g. be checked by the new hyperref driver.
+% \item[|annot_widget_no_A_AA|] (rule 6.9-2) no A and AA dictionary in widget.
+% \item[|form_no_AA|] (6.9-3) no /AA dictionary in form field
+% \end{description}
+%
+% \subsubsection{Tests with values and special handlers}
+%
+% \begin{description}
+%
+% \item[|min_pdf_version|] stores the minimal PDF version.
+% It should be checked against the current PDF version (\cs{pdf_version:}).
+% A failure means that the version should be changed.
+% This check is done by \pkg{l3pdfmeta} when the version is set with
+% \cs{DeclareDocumentMetadata} so more checks are only needed if the version is changed later.
+% \item[|outputintent_subtype|] this requirement stores allowed
+% names for the |/Outputintent| subtype like |GTS_PDFA1|.
+% This value is typically only read.
+% \item[|named_actions|] this requirement restricts the list of
+% allowed named actions to |NextPage|, |PrevPage|, |FirstPage|, |LastPage|.
+% The check should supply the named action without slash
+% (e.g. |View| (failure) or |NextPage| (pass)).
+%
+% \item[|annot_action_A|] (rule 6.6.1-1) this requirement restricts
+% the allowed subtypes of the
+% |/A| dictionary of an action. The check should supply the user
+% subtype without slash e.g. as |GoTo| (pass) or |Movie| (failure).
+% \end{description}
% \end{documentation}
%
% \begin{implementation}
@@ -114,17 +247,126 @@
\str_new:N \l_@@_tmpa_str
% \end{macrocode}
% \end{variable}
-
% \section{Standards (work in progress)}
% \subsection{Tools and tests}
-% This public property will contain the settings for the document.
-% \begin{variable}{\g_pdfmeta_standard_prop}
+% This internal property will contain for now the settings for the document.
+% \begin{variable}{\g_@@_standard_prop}
% \begin{macrocode}
-\prop_new:N \g_pdfmeta_standard_prop
+\prop_new:N \g_@@_standard_prop
% \end{macrocode}
% \end{variable}
+% \subsection{Functions to check a requirement}
+% At first two commands to get the standard value if needed:
+% \begin{macro}[EXP]{\pdfmeta_standard_item:n}
+% \begin{macrocode}
+\cs_new:Npn \pdfmeta_standard_item:n #1
+ {
+ \prop_item:Nn \g_@@_standard_prop {#1}
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pdfmeta_standard_get:nN}
+% \begin{macrocode}
+\cs_new_protected:Npn \pdfmeta_standard_get:nN #1 #2
+ {
+ \prop_get:NnN \g_@@_standard_prop {#1} #2
+ }
+% \end{macrocode}
+% \end{macro}
+% Now two functions to check the requirement. A simple and one value/handler based.
+% \begin{macro}[pTF]{\pdfmeta_standard_verify:n}
+% This is a simple test is the requirement is in the prop.
+% \begin{macrocode}
+\prg_new_conditional:Npnn \pdfmeta_standard_verify:n #1 {T,F,TF}
+ {
+ \prop_if_in:NnTF \g_@@_standard_prop {#1}
+ {
+ \prg_return_false:
+ }
+ {
+ \prg_return_true:
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[TF]{\pdfmeta_standard_verify:nn}
+% \begin{macrocode}
+\prg_new_protected_conditional:Npnn \pdfmeta_standard_verify:nn #1 #2 {T,F,TF}
+ {
+ \prop_if_in:NnTF \g_@@_standard_prop {#1}
+ {
+ \cs_if_exist:cTF {@@_standard_verify_handler_#1:nn}
+ { % dedicated test handler:
+ % should return true of false.
+ \exp_args:Nnnx
+ \use:c
+ {@@_standard_verify_handler_#1:nn}
+ { #2 }
+ { \prop_item:Nn \g_@@_standard_prop {#1} }
+ }
+ {
+ \prg_return_false:
+ }
+ }
+ {
+ \prg_return_true:
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% Now we setup a number of handlers.
+%
+% The first actually ignores the user values and tests against the
+% current pdf version. If this is smaller than the minimum we report a failure.
+% \begin{macro}{\@@_standard_verify_handler_min_pdf_version:nn}
+% \begin{macrocode}
+% #1 = user value, #2 = standard value
+\cs_new_protected:Npn \@@_standard_verify_handler_min_pdf_version:nn #1 #2
+ {
+ \pdf_version_compare:NnTF <
+ { #2 }
+ {\prg_return_false:}
+ {\prg_return_true:}
+ }
+% \end{macrocode}
+% \end{macro}
+% The next checks if the user value is in the list and returns a failure if not.
+% \begin{macro}{\@@_standard_verify_handler_named_actions:nn}
+% \begin{macrocode}
+
+\cs_new_protected:Npn \@@_standard_verify_handler_named_actions:nn #1 #2
+ {
+ \tl_if_in:nnTF { #2 }{ #1 }
+ {\prg_return_true:}
+ {\prg_return_false:}
+ }
+% \end{macrocode}
+% \end{macro}
+% The next checks if the user value is in the list and returns a failure if not.
+% \begin{macro}{\@@_standard_verify_handler_annot_action_A:nn}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_standard_verify_handler_annot_action_A:nn #1 #2
+ {
+ \tl_if_in:nnTF { #2 }{ #1 }
+ {\prg_return_true:}
+ {\prg_return_false:}
+ }
+% \end{macrocode}
+% \end{macro}
+% This check is probably not needed, but for completeness
+% \begin{macro}{\@@_standard_verify_handler_outputintent_subtype:nn}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_standard_verify_handler_outputintent_subtype:nn #1 #2
+ {
+ \tl_if_eq:nnTF { #2 }{ #1 }
+ {\prg_return_true:}
+ {\prg_return_false:}
+ }
+% \end{macrocode}
+% \end{macro}
% \subsection{Enforcing requirements}
-% A number of requirements can sensibly be enforced by use.
+% A number of requirements can sensibly be enforced by us.
% \subsubsection{Annot flags}
% pdf/A require a number of settings here, we store them in a command which
% can be added to the property of the standard:
@@ -146,20 +388,24 @@
% \begin{macrocode}
\hook_gput_code:nnn {begindocument} {pdf}
{
- \prop_if_in:NnT\g_pdfmeta_standard_prop { annot_flags }
+ \pdfmeta_standard_verify:nF { annot_flags }
{ \@@_verify_pdfa_annot_flags: }
}
% \end{macrocode}
%
% \subsection{pdf/A}
+% We use global properties so that follow up standards can be
+% copied and then adjusted.
+% Some note about requirements for more standard can
+% be found in info/pdfstandard.tex.
% \begin{variable}{
-% \g_pdfmeta_standard_pdf/A-1b_prop ,
-% \g_pdfmeta_standard_pdf/A-2b_prop,
-% \g_pdfmeta_standard_pdf/A-3b_prop
+% \g_@@_standard_pdf/A-1b_prop ,
+% \g_@@_standard_pdf/A-2b_prop ,
+% \g_@@_standard_pdf/A-3b_prop
% }
% \begin{macrocode}
-\prop_new:c { g_pdfmeta_standard_pdf/A-1b_prop }
-\prop_set_from_keyval:cn { g_pdfmeta_standard_pdf/A-1b_prop }
+\prop_new:c { g_@@_standard_pdf/A-1b_prop }
+\prop_set_from_keyval:cn { g_@@_standard_pdf/A-1b_prop }
{
,name = pdf/A-1b
,type = A
@@ -214,53 +460,32 @@
}
%A-2b ==============
-\prop_new:c { g_pdfmeta_standard_pdf/A-2b_prop }
+\prop_new:c { g_@@_standard_pdf/A-2b_prop }
\prop_gset_eq:cc
- { g_pdfmeta_standard_pdf/A-2b_prop }
- { g_pdfmeta_standard_pdf/A-1b_prop }
+ { g_@@_standard_pdf/A-2b_prop }
+ { g_@@_standard_pdf/A-1b_prop }
\prop_gput:cnn
- { g_pdfmeta_standard_pdf/A-2b_prop }{name}{pdf/A-2b}
+ { g_@@_standard_pdf/A-2b_prop }{name}{pdf/A-2b}
\prop_gput:cnn
- { g_pdfmeta_standard_pdf/A-2b_prop }{year}{2011}
+ { g_@@_standard_pdf/A-2b_prop }{year}{2011}
% embedding files is allowed (with restrictions)
\prop_gremove:cn
- { g_pdfmeta_standard_pdf/A-2b_prop }
+ { g_@@_standard_pdf/A-2b_prop }
{ embed_content}
%A-3b ==============
-\prop_new:c { g_pdfmeta_standard_pdf/A-3b_prop }
+\prop_new:c { g_@@_standard_pdf/A-3b_prop }
\prop_gset_eq:cc
- { g_pdfmeta_standard_pdf/A-3b_prop }
- { g_pdfmeta_standard_pdf/A-2b_prop }
+ { g_@@_standard_pdf/A-3b_prop }
+ { g_@@_standard_pdf/A-2b_prop }
\prop_gput:cnn
- { g_pdfmeta_standard_pdf/A-3b_prop }{name}{pdf/A-3b}
+ { g_@@_standard_pdf/A-3b_prop }{name}{pdf/A-3b}
\prop_gput:cnn
- { g_pdfmeta_standard_pdf/A-2b_prop }{year}{2012}
+ { g_@@_standard_pdf/A-2b_prop }{year}{2012}
% embedding files is allowed (with restrictions)
\prop_gremove:cn
- { g_pdfmeta_standard_pdf/A-3b_prop }
+ { g_@@_standard_pdf/A-3b_prop }
{ embed_content}
-
-% ["pdf/a-1b:2005"] = {
-% pdf_version = 1.4,
-% format_name = "pdf/a-1b:2005",
-% xmp_file = "lpdf-pda.xml",
-% gts_flag = "GTS_PDFA1",
-% gray_scale = true,
-% cmyk_colors = true,
-% rgb_colors = true,
-% spot_colors = true,
-% calibrated_rgb_colors = true, -- unknown
-% cielab_colors = true, -- unknown
-% include_intents = true,
-% forms = true,
-% internal_icc_profiles = true,
-% include_cidsets = true,
-% include_charsets = true,
-% inject_metadata = function()
-% injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfaid='http://www.aiim.org/pdfa/ns/id/'><pdfaid:part>1</pdfaid:part><pdfaid:conformance>B</pdfaid:conformance></rdf:Description>",false)
-% end
-% },
% \end{macrocode}
% \end{variable}
%
@@ -330,15 +555,15 @@
\AddToHook{begindocument/end}
{
- \prop_if_in:NnT\g_pdfmeta_standard_prop {outputintent}
+ \prop_if_in:NnT\g_@@_standard_prop {outputintent}
{
\exp_args:Nx
\@@_embed_colorprofile:n
- {\prop_item:Nn \g_pdfmeta_standard_prop {outputintent_profile}}
+ {\prop_item:Nn \g_@@_standard_prop {outputintent_profile}}
\exp_args:Nxx
\@@_write_outputintent:nn
- {\prop_item:Nn \g_pdfmeta_standard_prop {outputintent_profile}}
- {\prop_item:Nn \g_pdfmeta_standard_prop {outputintent_subtype}}
+ {\prop_item:Nn \g_@@_standard_prop {outputintent_profile}}
+ {\prop_item:Nn \g_@@_standard_prop {outputintent_subtype}}
}
}
% \end{macrocode}
More information about the latex3-commits
mailing list.