From 27bb1897864a47c3b5a67db781d1f0fc632a94ce Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Sat, 6 Apr 2019 21:11:36 +0000
Subject: hyperxmp (6apr19)

git-svn-id: svn://tug.org/texlive/trunk@50812 c570f23f-e606-0410-a88d-b1316a301751
---
 .../texmf-dist/source/latex/hyperxmp/hyperxmp.dtx  | 294 ++++++++++++---------
 1 file changed, 176 insertions(+), 118 deletions(-)

(limited to 'Master/texmf-dist/source/latex/hyperxmp/hyperxmp.dtx')

diff --git a/Master/texmf-dist/source/latex/hyperxmp/hyperxmp.dtx b/Master/texmf-dist/source/latex/hyperxmp/hyperxmp.dtx
index c52380e5734..a5aa24a146b 100644
--- a/Master/texmf-dist/source/latex/hyperxmp/hyperxmp.dtx
+++ b/Master/texmf-dist/source/latex/hyperxmp/hyperxmp.dtx
@@ -22,7 +22,7 @@
 %<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
 %<package>\ProvidesPackage{hyperxmp}
 %<*package>
-    [2019/03/31 v4.0 Store hyperref metadata in XMP format]
+    [2019/04/05 v4.1 Store hyperref metadata in XMP format]
 %</package>
 %
 %<*driver>
@@ -39,6 +39,7 @@
 \usepackage{varioref}
 \usepackage{alltt}
 \usepackage{multicol}
+\usepackage{makeidx}
 \usepackage[utf8]{inputenc}
 \usepackage{hyperxmp}
 \usepackage[unicode,bookmarksopen,bookmarksopenlevel=2,bookmarksnumbered]{hyperref}
@@ -88,7 +89,7 @@
 %</driver>
 % \fi
 %
-% \CheckSum{2082}
+% \CheckSum{2095}
 %
 % \CharacterTable
 %  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -123,8 +124,8 @@
 %   to work within email addresses, as requested by Leonid Sinev}
 % \changes{v2.6}{2014/09/24}{Added support for a new \protect\optname{pdfdate}
 %   key to explicitly specify the document date (and optionally time)}
-% \changes{v2.9}{2016/04/25}{Force inclusion of \protect\xmpterm{dc:creator},
-%   \protect\xmpterm{dc:title}, and \protect\xmpterm{dc:description}---even if
+% \changes{v2.9}{2016/04/25}{Force inclusion of \protect\xmpprop{dc:creator},
+%   \protect\xmpprop{dc:title}, and \protect\xmpprop{dc:description}---even if
 %   empty---when \protect\pkgname{hyperref} is loaded with the
 %   \protect\optname{pdfa} option (suggested by Leonid Sinev)}
 % \changes{v2.9}{2016/04/26}{Introduced the \protect\optname{pdftype}
@@ -138,34 +139,44 @@
 %   empty arguments, including non-empty but all spaces}
 % \changes{v4.0}{2019/03/14}{Include all metadata within a single
 %   \protect\xmpterm{rdf:Description} block}
+% \changes{v4.1}{2019/04/05}{Updated the documentation to refer to
+%   \protect\cs{pdfnumpages} by its correct name.  Thanks to Volker RW Schaa
+%   for catching the discrepancy}
 %
 % ^^A \GetFileInfo{hyperxmp.dtx}
 %
-% \DoNotIndex{,\,\ ,\!,\",\#,\(,\),\*,\<,\>,\@cons,\@empty}
-% \DoNotIndex{\@ifpackageloaded,\@ifundefined,\@nil,\@tempcnta,\@tempcntb}
-% \DoNotIndex{\MessageBreak,\\,\^,\^,\_,\advance,\afterassignment}
+% \DoNotIndex{\,,\&,\ ,\!,\",\#,\(,\),\*,\<,\>,\\,\^,\~,\^,\_}
+% \DoNotIndex{\@cons,\@empty,\@firstofone,\@firstoftwo,\@gobble,\@gobbletwo}
+% \DoNotIndex{\@ifpackageloaded,\@ifundefined,\@nil,\@secondoftwo}
+% \DoNotIndex{\@tempcnta,\@tempcntb,\MessageBreak,\advance,\afterassignment}
 % \DoNotIndex{\aftergroup,\begin,\begingroup,\bgroup,\catcode,\csname,\def}
 % \DoNotIndex{\divide,\edef,\egroup,\else,\end,\endcsname,\endgroup}
 % \DoNotIndex{\expandafter,\fi,\futurelet,\g@addto@macro,\gdef,\global,\if}
 % \DoNotIndex{\ifcase,\ifnum,\ifx,\immediate,\lccode,\let,\loop,\lowercase}
 % \DoNotIndex{\multiply,\newcommand,\noexpand,\or,\relax,\repeat,\space}
-% \DoNotIndex{\string,\the,\toks,\uccode,\uppercase,\usepackage,\xdef,\~}
+% \DoNotIndex{\string,\the,\toks,\uccode,\uppercase,\usepackage,\xdef}
 %
 % ^^A  Define a few logical styles.
 % \DeclareRobustCommand{\term}[1]{#1\SortIndex{#1}{#1}}
 % \DeclareRobustCommand{\pkgname}[1]{\mbox{\textsf{#1}}\SortIndex{#1}{\textsf{#1}}}
 % \makeatletter
-% \DeclareRobustCommand{\xmpterm}[2][]{^^A
-%   \def\xmptermopt{#1}^^A
-%   \ifx\xmptermopt\@empty
+% \DeclareRobustCommand{\xmpprop}[2][]{^^A   XMP property
+%   \def\xmppropopt{#1}^^A
+%   \ifx\xmppropopt\@empty
 %     \mbox{\textsf{#2}}^^A
 %   \else
 %     \mbox{\textsf{#2}}.\mbox{\textsf{#1}}^^A
 %     \SortIndex{#1}{\textsf{#1}}^^A
 %   \fi
 %   \SortIndex{#2}{\textsf{#2}}^^A
+%   \index{properties, \acrostyle{XMP}&#2=\textsf{#2}}^^A
+% }
+% \DeclareRobustCommand{\xmpterm}[1]{^^A     All other XMP terms
+%   \mbox{\textsf{#1}}^^A
+%   \SortIndex{#1}{\textsf{#1}}^^A
 % }
 % \makeatother
+% \index{XMP=\acrostyle  {XMP}&properties|see{properties, \acrostyle{XMP}}}
 % \DeclareRobustCommand{\pdfterm}[1]{\mbox{\textsf{#1}}\SortIndex{#1}{\textsf{#1}}}
 % \DeclareRobustCommand{\cmdname}[1]{\mbox{\texttt{#1}}\SortIndex{#1}{\texttt{#1}}}
 % \DeclareRobustCommand{\optname}[1]{^^A
@@ -173,7 +184,7 @@
 %   \SortIndex{#1}{\textsf{#1} (option)}^^A
 %   \index{options&#1=\textsf{#1}}^^A
 % }
-% ^^A  \moptname is the same as \optname but also typesets the
+% ^^A  \moptname is the same as \optname but additionally typesets the
 % ^^A  option name in the margin.
 % \DeclareRobustCommand{\moptname}[1]{^^A
 %   \optname{#1}^^A
@@ -303,7 +314,7 @@
 %
 % In the preceding code, the |dc| namespace refers to the
 % \href{http://purl.org/DC/}{Dublin Core schema}, a collection of
-% metadata properties.  The \xmpterm{dc:creator} property surrounds the
+% metadata properties.  The \xmpprop{dc:creator} property surrounds the
 % list of authors.  The \textsf{rdf} namespace is the
 % \href{http://www.w3.org/RDF/}{Resource Description Framework}, which
 % defines \xmpterm{rdf:Seq} as an ordered list of values.  Each author
@@ -322,48 +333,49 @@
 % \label{page:begin-metadata-list}
 % \begin{itemize} \raggedright
 %   \item address of primary author
-%     (\xmpterm[CiAdrExtadr]{Iptc4xmpCore:CreatorContactInfo},
-%     \xmpterm[CiAdrCity]{Iptc4xmpCore:CreatorContactInfo},
-%     \xmpterm[CiAdrRegion]{Iptc4xmpCore:CreatorContactInfo},
-%     \xmpterm[CiAdrPcode]{Iptc4xmpCore:CreatorContactInfo}, and
-%     \xmpterm[CiAdrCtry]{Iptc4xmpCore:CreatorContactInfo})
-%   \item author(s) (\xmpterm{dc:creator})
-%   \item base \acro{URL} for relative references (\xmpterm{xmp:BaseURL})
-%   \item book edition (\xmpterm{prism:bookEdition})
-%   \item copyright (\xmpterm{dc:rights} and \xmpterm{xmpRights:Marked})
-%   \item date (\xmpterm{dc:date}, \xmpterm{xmp:CreateDate},
-%     \xmpterm{xmp:ModifyDate}, and \xmpterm{xmp:MetadataDate})
-%   \item \acro{DOI} (\xmpterm{prism:doi})
-%   \item email address(es) of primary author (\xmpterm[CiEmailWork]{Iptc4xmpCore:CreatorContactInfo})
-%   \item file format (\xmpterm{dc:format})
-%   \item file name of main \LaTeX\ source file (\xmpterm{dc:source})
-%   \item file size in bytes (\xmpterm{prism:byteCount})
-%   \item \acro{ISBN} (\xmpterm{prism:isbn})
-%   \item \acro{ISSN}---both print (\xmpterm{prism:issn}) and electronic (\xmpterm{prism:eIssn})
-%   \item issue number of parent publication (\xmpterm{prism:number})
-%   \item keywords (\xmpterm{pdf:Keywords} and \xmpterm{dc:subject})
-%   \item language used (\xmpterm{dc:language})
-%   \item license \acro{URL} (\xmpterm{xmpRights:WebStatement})
-%   \item metadata writer (\xmpterm{photoshop:CaptionWriter})
-%   \item page count (\xmpterm{prism:pageCount})
-%   \item page range(s) (\xmpterm{prism:pageRange})
-%   \item \acro{PDF} version (\xmpterm{pdf:PDFVersion})
-%   \item \acro{PDF}-generating tool (\xmpterm{pdf:Producer} and \xmpterm{xmp:CreatorTool})
-%   \item \acro{PDF/A} compliance level and version (\xmpterm{pdfaid:part} and \xmpterm{pdfaid:conformance})
-%   \item position/title of primary author (\xmpterm{photoshop:AuthorsPosition})
-%   \item publication name of parent publication (\xmpterm{prism:publicationName})
-%   \item summary (\xmpterm{dc:description})
-%   \item subtitle (\xmpterm{prism:subtitle})
-%   \item telephone number(s) of primary author (\xmpterm[CiTelWork]{Iptc4xmpCore:CreatorContactInfo})
-%   \item title (\xmpterm{dc:title})
-%   \item type of document (\xmpterm{dc:type})
-%   \item type of parent publication (\xmpterm{prism:aggregationType})
-%   \item \acro{URL} of the document (\xmpterm{prism:url})
-%   \item \acro{URL}(s) of the primary author (\xmpterm[CiUrlWork]{Iptc4xmpCore:CreatorContactInfo})
-%   \item \acro{UUID} for the document (\xmpterm{xmpMM:DocumentID})
-%   \item \acro{UUID} for the document instance (\xmpterm{xmpMM:InstanceID})
-%   \item version identifier for the document (\xmpterm{xmpMM:VersionID})
-%   \item volume number of parent publication (\xmpterm{prism:volume})
+%     (\xmpprop[CiAdrExtadr]{Iptc4xmpCore:CreatorContactInfo},
+%     \xmpprop[CiAdrCity]{Iptc4xmpCore:CreatorContactInfo},
+%     \xmpprop[CiAdrRegion]{Iptc4xmpCore:CreatorContactInfo},
+%     \xmpprop[CiAdrPcode]{Iptc4xmpCore:CreatorContactInfo}, and
+%     \xmpprop[CiAdrCtry]{Iptc4xmpCore:CreatorContactInfo})
+%   \item author(s) (\xmpprop{dc:creator})
+%   \item base \acro{URL} for relative references (\xmpprop{xmp:BaseURL})
+%   \item book edition (\xmpprop{prism:bookEdition})
+%   \item copyright (\xmpprop{dc:rights} and \xmpprop{xmpRights:Marked})
+%   \item date (\xmpprop{dc:date}, \xmpprop{xmp:CreateDate},
+%     \xmpprop{xmp:ModifyDate}, and \xmpprop{xmp:MetadataDate})
+%   \item \acro{DOI} (\xmpprop{prism:doi})
+%   \item email address(es) of primary author (\xmpprop[CiEmailWork]{Iptc4xmpCore:CreatorContactInfo})
+%   \item file format (\xmpprop{dc:format})
+%   \item file name of main \LaTeX\ source file (\xmpprop{dc:source})
+%   \item file size in bytes (\xmpprop{prism:byteCount})
+%   \item \acro{ISBN} (\xmpprop{prism:isbn})
+%   \item \acro{ISSN}---both print (\xmpprop{prism:issn}) and electronic (\xmpprop{prism:eIssn})
+%   \item issue number of parent publication (\xmpprop{prism:number})
+%   \item keywords (\xmpprop{pdf:Keywords} and \xmpprop{dc:subject})
+%   \item language used (\xmpprop{dc:language})
+%   \item license \acro{URL} (\xmpprop{xmpRights:WebStatement})
+%   \item metadata writer (\xmpprop{photoshop:CaptionWriter})
+%   \item page count (\xmpprop{prism:pageCount})
+%   \item page range(s) (\xmpprop{prism:pageRange})
+%   \item \acro{PDF} version (\xmpprop{pdf:PDFVersion})
+%   \item \acro{PDF}-generating tool (\xmpprop{pdf:Producer} and \xmpprop{xmp:CreatorTool})
+%   \item \acro{PDF/A} compliance level and version (\xmpprop{pdfaid:part} and \xmpprop{pdfaid:conformance})
+%   \item position/title of primary author (\xmpprop{photoshop:AuthorsPosition})
+%   \item publication name of parent publication (\xmpprop{prism:publicationName})
+%   \item publisher of the document (\xmpprop{dc:publisher})
+%   \item summary (\xmpprop{dc:description})
+%   \item subtitle (\xmpprop{prism:subtitle})
+%   \item telephone number(s) of primary author (\xmpprop[CiTelWork]{Iptc4xmpCore:CreatorContactInfo})
+%   \item title (\xmpprop{dc:title})
+%   \item type of document (\xmpprop{dc:type})
+%   \item type of parent publication (\xmpprop{prism:aggregationType})
+%   \item \acro{URL} of the document (\xmpprop{prism:url})
+%   \item \acro{URL}(s) of the primary author (\xmpprop[CiUrlWork]{Iptc4xmpCore:CreatorContactInfo})
+%   \item \acro{UUID} for the document (\xmpprop{xmpMM:DocumentID})
+%   \item \acro{UUID} for the document instance (\xmpprop{xmpMM:InstanceID})
+%   \item version identifier for the document (\xmpprop{xmpMM:VersionID})
+%   \item volume number of parent publication (\xmpprop{prism:volume})
 % \end{itemize}
 % \label{page:end-metadata-list}
 %
@@ -450,9 +462,10 @@
 %   \item \optname{pdflicenseurl}
 %   \item \optname{pdfmetadate}
 %   \item \optname{pdfmetalang}
-%   \item \optname{pdfpagecount}
+%   \item \optname{pdfnumpages}
 %   \item \optname{pdfpagerange}
 %   \item \optname{pdfpublication}
+%   \item \optname{pdfpublisher}
 %   \item \optname{pdfpubtype}
 %   \item \optname{pdfsource}
 %   \item \optname{pdfsubtitle}
@@ -574,7 +587,8 @@
 % French-language title.  Were the language or pronunciation differences
 % significant, |fr-FR| would indicate specifically the French spoken in
 % France, as opposed to that spoken in, say, Canada (|fr-CA|) or Belgium
-% (|fr-BE|).
+% (|fr-BE|).  The publisher itself can be named using
+% \moptname{pdfpublisher}.
 %
 % \moptname{pdfpubtype} indicates the type of publication in which the
 % document was published.  This should be one of the \acro{PRISM}
@@ -727,6 +741,7 @@
 %      pdfdocumentid={uuid:6d1ac9ec-4ff2-515a-954b-648eeb4853b0},
 %      pdfversionid={2.998e8},
 %      pdfpublication={[de]Annalen der Physik},
+%      pdfpublisher={Wiley-VCH},
 %      pdfpubtype={journal},
 %      pdfvolumenum={322},
 %      pdfissuenum={6},
@@ -810,9 +825,9 @@
 % \optname{pdfauthor}, \optname{pdftitle}, \optname{pdfsubject}, and
 % \optname{pdfkeywords} options assign values to those keys.  The
 % \pkgname{hyperxmp} package additionally uses those options to assign
-% values to various \acro{XMP} metadata: \xmpterm{dc:creator},
-% \xmpterm{dc:title}, \xmpterm{dc:description}, and
-% \xmpterm{pdf:Keywords}.  The \acro{PDF/A} specification indicates that
+% values to various \acro{XMP} metadata: \xmpprop{dc:creator},
+% \xmpprop{dc:title}, \xmpprop{dc:description}, and
+% \xmpprop{pdf:Keywords}.  The \acro{PDF/A} specification indicates that
 % values that appear in both the \acro{PDF} \pdfterm{Info} dictionary
 % and \acro{XMP} packet must match.  The problem is that in \acro{XMP},
 % the author and keywords can be proper lists, as in
@@ -1042,7 +1057,7 @@
 % \end{verbatim}
 %
 % \noindent
-% Rather, it generates a \xmpterm{dc:rights} tag of the form
+% Rather, it generates a \xmpprop{dc:rights} tag of the form
 % ``\texttt{Copyright \textcopyright\ =2=0=by-1by=0\the\year, Scott
 %   Pakin}''.  The garbage in that line corresponds to the remnants of
 % the |\printfdate| code after expanding all of the \tex\ primitives and
@@ -1588,6 +1603,14 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\@pdfpublisher}
+% Prepare to store the name of the document's publisher.
+%    \begin{macrocode}
+\def\@pdfpublisher{}
+\define@key{Hyp}{pdfpublisher}{\hyxmp@pdfstringdef\@pdfpublisher{#1}}
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\@pdfvolumenum}
 % Prepare to store the volume identifier of the publication in which the
 % document was published.
@@ -1989,10 +2012,10 @@
   }%
   \ifx\hyxmp@concated@metadata\@empty
     \PackageWarningNoLine{hyperxmp}{%
-\jobname.tex did not specify any metadata to\MessageBreak
-include in the XMP packet.\space\space Please see the\MessageBreak
-hyperxmp documentation for instructions on how to\MessageBreak
-provide metadata values to hyperxmp}%
+      \jobname.tex did not specify any metadata to\MessageBreak
+      include in the XMP packet.\space\space Please see the\MessageBreak
+      hyperxmp documentation for instructions on how to\MessageBreak
+      provide metadata values to hyperxmp}%
   \fi
 }
 %    \end{macrocode}
@@ -2077,23 +2100,36 @@ provide metadata values to hyperxmp}%
     }%
     {}%
 %    \end{macrocode}
+% Older versions of \pkgname{hyperref} write the \pdfterm{Info}
+% dictionary to the \acro{PDF} file at the end of the document.  New
+% versions of \pkgname{hyperref} write the \pdfterm{Info} dictionary to
+% the \acro{PDF} file at the \emph{beginning} of the document.  For
+% compatibility with both old and new \pkgname{hyperref} implementations
+% we suppress writing the \pdfterm{Info} dictionary here, at the
+% beginning of the document.
+% \changes{v4.1}{2019/04/02}{Invoke
+%   \protect\cs{hyxmp@suppress@pdf@metadata} at the beginning of the
+%   document, for compatibility with both newer and older versions of
+%   \protect\pkgname{hyperref}}
+%    \begin{macrocode}
+      \hyxmp@suppress@pdf@metadata
+%    \end{macrocode}
 % We wait until the end of the document to construct the \acro{XMP}
 % packet and write it to the \acro{PDF} document catalog.  This gives
 % the author ample opportunity to provide metadata to \pkgname{hyperref}
 % and thereby \pkgname{hyperxmp}.
 %    \begin{macrocode}
     \hyxmp@at@end{%
-      \hyxmp@suppress@pdf@metadata
       \hyxmp@find@metadata
       \hyxmp@embed@packet
     }%
   }{%
     \PackageWarningNoLine{hyperxmp}{%
-\jobname.tex failed to include a\MessageBreak
-\string\usepackage\string{hyperref\string}
-in the preamble.\MessageBreak
-Consequently, all hyperxmp functionality will be\MessageBreak
-disabled}%
+      \jobname.tex failed to include a\MessageBreak
+      \string\usepackage\string{hyperref\string}
+      in the preamble.\MessageBreak
+      Consequently, all hyperxmp functionality will be\MessageBreak
+      disabled}%
   }%
 }
 %    \end{macrocode}
@@ -2473,7 +2509,7 @@ disabled}%
 % different literal for |\hyxmp@xmp@to@pdf@date@vii|'s pattern-matching
 % to work.
 %    \begin{macrocode}
-\let\@hyxmp@gobbletwo=\@gobbletwo
+\let\hyxmp@gobbletwo=\@gobbletwo
 %    \end{macrocode}
 % \end{macro}
 %
@@ -2497,7 +2533,7 @@ disabled}%
     Z%
   \fi
   \ifx#3\relax
-    \expandafter\@hyxmp@gobbletwo
+    \expandafter\hyxmp@gobbletwo
   \fi
   \@gobbletwo #4%
 }
@@ -3082,8 +3118,8 @@ disabled}%
 % \subsubsection{Providing metadata in multiple languages}
 % \label{sec:lang-alt}
 %
-% Certain \acro{XMP} tags---\xmpterm{dc:title},
-% \xmpterm{dc:description}, and \xmpterm{dc:rights} (and others?  Let me
+% Certain \acro{XMP} tags---\xmpprop{dc:title},
+% \xmpprop{dc:description}, and \xmpprop{dc:rights} (and others?  Let me
 % know.)---can be expressed in multiple languages.  The same text is
 % used for both language \optname{pdfmetalang} (default:
 % \optname{pdflang}) and language ``|x-default|''.  To express the same
@@ -3168,8 +3204,8 @@ disabled}%
 % We use a linear congruential generator to produce pseudorandom
 % version~4 \acro{UUID}s~\cite{Leach2005:uuid}.  True, this method has
 % its flaws but it's simple to implement in \tex\ and is good enough for
-% producing the \acro{XMP} \xmpterm{xmpMM:DocumentID} and
-% \xmpterm{xmpMM:InstanceID} fields.
+% producing the \acro{XMP} \xmpprop{xmpMM:DocumentID} and
+% \xmpprop{xmpMM:InstanceID} fields.
 %
 % \begin{macro}{\hyxmp@modulo@a}
 % Replace the contents of |\@tempcnta| with the contents modulo~|#1|.
@@ -3507,10 +3543,10 @@ _______________________________________________________________^^J%
 \newcommand*{\hyxmp@pdf@schema}{%
 %    \end{macrocode}
 % Add a block of \acro{XML} to |\hyxmp@xml| that lists the document's
-% keywords (the \xmpterm{pdf:Keywords} property), the tools used to
-% produce the \acro{PDF} file (the \xmpterm{pdf:Producer} property), and
+% keywords (the \xmpprop{pdf:Keywords} property), the tools used to
+% produce the \acro{PDF} file (the \xmpprop{pdf:Producer} property), and
 % the version of the \acro{PDF} standard adhered to (the
-% \xmpterm{pdf:PDFVersion} property).  Unlike most of the other schemata
+% \xmpprop{pdf:PDFVersion} property).  Unlike most of the other schemata
 % that \pkgname{hyperxmp} supports, the Adobe \acro{PDF} schema is
 % \emph{always} included in the document, even if all of its keys are
 % empty.  This is because \acro{PDF/A}-1b requires the keywords and
@@ -3518,7 +3554,7 @@ _______________________________________________________________^^J%
 % metadata.  Because \pkgname{hyperref} always specifies the
 % \pdfterm{Keywords} and \pdfterm{Producer} fields, even when they're
 % empty, \pkgname{hyperxmp} has to follow suit and define
-% \xmpterm{pdf:Keywords} and \xmpterm{pdf:Producer} in the \acro{XMP}
+% \xmpprop{pdf:Keywords} and \xmpprop{pdf:Producer} in the \acro{XMP}
 % packet.
 % \changes{v2.4}{2013/12/21}{Made
 %   \texttt{\string\string\string\hyxmp@pdf@schema}
@@ -3774,23 +3810,44 @@ ______</dc:#2>^^J%
 % \end{macro}
 % \end{macro}
 %
+% \begin{macro}{\hyxmp@singleton@dc}
+% Given an optional list type (|Seq| or |Bag|), a Dublin Core property,
+% and a string, append a block of \acro{XML} representing a one-element
+% list consisting of the given string.
+% \changes{v4.1}{2019/04/05}{Added this macro}
+%    \begin{macrocode}
+\newcommand{\hyxmp@singleton@dc}[3][Bag]{%
+  \@ifnotmtarg{#3}{%
+    \hyxmp@xmlify{#3}%
+    \hyxmp@add@to@xml{%
+______<dc:#2>^^J%
+________<rdf:#1>^^J%
+__________<rdf:li>\hyxmp@xmlified</rdf:li>^^J%
+________</rdf:#1>^^J%
+______</dc:#2>^^J%
+    }%
+  }
+}
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\hyxmp@dc@schema}
 % Add properties defined by the Dublin Core schema to the |\hyxmp@xml|
-% macro.  Specifically, we add entries for the \xmpterm{dc:title}
+% macro.  Specifically, we add entries for the \xmpprop{dc:title}
 % property if the author specified a \optname{pdftitle}, the
-% \xmpterm{dc:description} property if the author specified a
-% \optname{pdfsubject}, the \xmpterm{dc:rights} property if the author
-% specified a \optname{pdfcopyright}, the \xmpterm{dc:creator} property
+% \xmpprop{dc:description} property if the author specified a
+% \optname{pdfsubject}, the \xmpprop{dc:rights} property if the author
+% specified a \optname{pdfcopyright}, the \xmpprop{dc:creator} property
 % if the author specified a \optname{pdfauthor}, the
-% \xmpterm{dc:subject} property if the author specified
-% \optname{pdfkeywords}, and the \xmpterm{dc:language} property if the
+% \xmpprop{dc:subject} property if the author specified
+% \optname{pdfkeywords}, and the \xmpprop{dc:language} property if the
 % author specified \optname{pdflang}.  We also specify the
-% \xmpterm{dc:date} property using the date the document was run through
-% \LaTeX\ and the \xmpterm{dc:source} property using the base name of
+% \xmpprop{dc:date} property using the date the document was run through
+% \LaTeX\ and the \xmpprop{dc:source} property using the base name of
 % the source file with |.tex| appended.
-% \changes{v2.0}{2012/08/26}{Added support for \xmpterm{dc:language}
-%   and \xmpterm{dc:source}}
-% \changes{v2.4}{2013/12/21}{Made \xmpterm{dc:language} a \xmpterm{Bag}
+% \changes{v2.0}{2012/08/26}{Added support for \xmpprop{dc:language}
+%   and \xmpprop{dc:source}}
+% \changes{v2.4}{2013/12/21}{Made \xmpprop{dc:language} a \xmpterm{Bag}
 %   instead of an individual item so as to conform to the latest
 %   \acro{XMP} specifications, a detail identified by Florian Breitwieser}
 %    \begin{macrocode}
@@ -3799,11 +3856,12 @@ ______</dc:#2>^^J%
   \hyxmp@rdf@dc[\ifHy@pdfa]{title}{\@pdftitle}%
   \hyxmp@rdf@dc[\ifHy@pdfa]{description}{\@pdfsubject}%
   \hyxmp@rdf@dc{rights}{\@pdfcopyright}%
+  \hyxmp@singleton@dc{publisher}{\@pdfpublisher}%
+  \hyxmp@singleton@dc[Seq]{date}{\hyxmp@today}%
+  \hyxmp@singleton@dc{language}{\@pdflang}%
+  \hyxmp@singleton@dc{type}{\@pdftype}%
   \hyxmp@list@to@xml[\ifHy@pdfa]{creator}{Seq}{\hyxmp@pdfauthor}%
   \hyxmp@list@to@xml{subject}{Bag}{\hyxmp@pdfkeywords}%
-  \hyxmp@list@to@xml{date}{Seq}{\hyxmp@today}%
-  \hyxmp@list@to@xml{language}{Bag}{\@pdflang}%
-  \hyxmp@list@to@xml{type}{Bag}{\@pdftype}%
   \ifx\@pdfsource\@empty
   \else
     \hyxmp@add@simple{dc:source}{\@pdfsource}%
@@ -3818,16 +3876,16 @@ ______</dc:#2>^^J%
 % \begin{macro}{\hyxmp@xmpRights@schema}
 % Add properties defined by the \acro{XMP} Rights Management schema to the
 % |\hyxmp@xml| macro.  Currently, these are only the
-% \xmpterm{xmpRights:Marked} property and the
-% \xmpterm{xmpRights:WebStatement} property.  If the author specified a
+% \xmpprop{xmpRights:Marked} property and the
+% \xmpprop{xmpRights:WebStatement} property.  If the author specified a
 % copyright statement we mark the document as copyrighted.  If the
 % author specified a license statement we include the \acro{URL} in the
 % metadata.
 % \changes{v1.4}{2011/05/29}{Renamed the \texttt{xapRights} namespace
 %   prefix to \texttt{xmpRights}}
 % \changes{v2.0}{2012/08/25}{Modified to include
-%   \xmpterm{xmpRights:Marked} only when \optname{pdfcopyright} is
-%   specified and \xmpterm{xmpRights:WebStatement} only when
+%   \xmpprop{xmpRights:Marked} only when \optname{pdfcopyright} is
+%   specified and \xmpprop{xmpRights:WebStatement} only when
 %   \optname{pdflicenseurl} is specified}
 %    \begin{macrocode}
 \newcommand*{\hyxmp@xmpRights@schema}{%
@@ -3870,12 +3928,12 @@ ______</dc:#2>^^J%
 % \begin{macro}{\hyxmp@mm@schema}
 % Add properties defined by the \acro{XMP} Media Management schema to
 % the |\hyxmp@xml| macro.  According to the \acro{XMP} specification,
-% the \xmpterm{xmpMM:DocumentID} property is supposed to uniquely
-% identify a document, and the \xmpterm{xmpMM:InstanceID} property is
+% the \xmpprop{xmpMM:DocumentID} property is supposed to uniquely
+% identify a document, and the \xmpprop{xmpMM:InstanceID} property is
 % supposed to change with each save operation~\cite{Adobe2012:XMP}.  As
 % seen in Section~\ref{sec:uuid-gen}, we do what we can to honor this
 % intention from within a \tex-based workflow.  We additionally support
-% the \xmpterm{xmpMM:VersionID} property, whose value is supplied by
+% the \xmpprop{xmpMM:VersionID} property, whose value is supplied by
 % the author using \optname{pdfversionid}.
 % \changes{v1.4}{2011/05/29}{Renamed the \texttt{xapMM} namespace
 %   prefix to \texttt{xmpMM}}
@@ -3883,7 +3941,7 @@ ______</dc:#2>^^J%
 %   \protect\cs{hyxmp@InstanceID} only if the document does not already
 %   define these using the \protect\optname{pdfdocumentid} and
 %   \protect\optname{pdfinstanceid} options}
-% \changes{v4.0}{2019/03/09}{Include \protect\xmpterm{xmpMM:VersionID} in
+% \changes{v4.0}{2019/03/09}{Include \protect\xmpprop{xmpMM:VersionID} in
 %   the \protect\acro{XMP} packet}
 %    \begin{macrocode}
 \gdef\hyxmp@mm@schema{%
@@ -3904,8 +3962,8 @@ ______</dc:#2>^^J%
 % \begin{macro}{\hyxmp@createdate}
 % Define |\hyxmp@createdate| as the document's creation date but in
 % \acro{XMP} date format, not \acro{PDF} date format.  We use
-% |\hyxmp@createdate| for the \xmpterm{xmp:CreateDate},
-% \xmpterm{xmp:ModifyDate}, and \xmpterm{xmp:MetadataDate} fields.
+% |\hyxmp@createdate| for the \xmpprop{xmp:CreateDate},
+% \xmpprop{xmp:ModifyDate}, and \xmpprop{xmp:MetadataDate} fields.
 %    \begin{macrocode}
 \newcommand*{\hyxmp@define@createdate}{%
   \@ifundefined{pdffeedback}{%
@@ -3939,8 +3997,8 @@ ______</dc:#2>^^J%
 % \optname{baseurl}.
 % \changes{v2.0}{2012/08/26}{Added this macro}
 % \changes{v3.0}{2016/07/04}{Made the \protect\acro{XMP}
-%   \protect\xmpterm{xmp:CreateDate}, \protect\xmpterm{xmp:ModifyDate},
-%   and \protect\xmpterm{xmp:MetadataDate} match the \protect\acro{PDF}
+%   \protect\xmpprop{xmp:CreateDate}, \protect\xmpprop{xmp:ModifyDate},
+%   and \protect\xmpprop{xmp:MetadataDate} match the \protect\acro{PDF}
 %   \protect\pdfterm{CreationDate}}
 % \changes{v3.2}{2017/01/22}{Honor \string\pkgname{hyperref}'s
 %   \string\optname{pdfcreationdate} and \string\optname{pdfmoddate}
@@ -4009,8 +4067,8 @@ ______</dc:#2>^^J%
 % \begin{macro}{\hyxmp@photoshop@data}
 % Add properties defined by the Photoshop schema to the |\hyxmp@xml|
 % macro.  We currently support only the
-% \xmpterm{photoshop:AuthorsPosition} and
-% \xmpterm{photoshop:CaptionWriter} properties.
+% \xmpprop{photoshop:AuthorsPosition} and
+% \xmpprop{photoshop:CaptionWriter} properties.
 %    \begin{macrocode}
 \gdef\hyxmp@photoshop@schema{%
   \edef\hyxmp@photoshop@data{\@pdfauthortitle\@pdfcaptionwriter}%
@@ -4114,7 +4172,7 @@ ______</dc:#2>^^J%
 % \begin{macro}{\hyxmp@iptc@schema}
 % Add properties defined by the \acro{IPTC} Photo Metadata
 % schema~\cite{IPTC2010:photo-meta} to the |\hyxmp@xml| macro.  We
-% currently support only the \xmpterm{Iptc4xmpCore:CreatorContactInfo}
+% currently support only the \xmpprop{Iptc4xmpCore:CreatorContactInfo}
 % property, although this is a structure containing multiple fields.
 % \changes{v2.2}{2012/12/07}{Added this macro}
 % \changes{v2.9}{2016/04/23}{Use \textsf{Iptc4xmpCore} instead of
@@ -4133,9 +4191,9 @@ ______</dc:#2>^^J%
 \gdef\hyxmp@iptc@schema{%
 %    \end{macrocode}
 % Because we currently support only
-% \xmpterm{Iptc4xmpCore:CreatorContactInfo} it suffices to check if we
+% \xmpprop{Iptc4xmpCore:CreatorContactInfo} it suffices to check if we
 % have any relevant data.  If so, we instantiate a
-% \xmpterm{Iptc4xmpCore:ContactInfo} structure with all available
+% \xmpprop{Iptc4xmpCore:ContactInfo} structure with all available
 % fields.
 %    \begin{macrocode}
   \ifx\hyxmp@iptc@data\@empty
@@ -4145,7 +4203,7 @@ ______<Iptc4xmpCore:CreatorContactInfo rdf:parseType="Resource">^^J%
     }%
 %    \end{macrocode}
 % We locally redefine |\hyxmp@extra@indent| to increase the indentation
-% of the assignments to \xmpterm{Iptc4xmpCore:CreatorContactInfo}'s
+% of the assignments to \xmpprop{Iptc4xmpCore:CreatorContactInfo}'s
 % fields.
 %    \begin{macrocode}
     \bgroup
@@ -4426,8 +4484,8 @@ ______________________</rdf:li>^^J%
 % \changes{v2.2}{2012/12/13}{Added this macro to support
 %   \acro{PDF/A} generation}
 % \changes{v2.3}{2013/01/08}{Gave the
-%   \xmpterm{Iptc4xmpCore:CreatorContactInfo} fields a unique
-%   \xmpterm{pdfaType:prefix} to better support conversion of the
+%   \xmpprop{Iptc4xmpCore:CreatorContactInfo} fields a unique
+%   \xmpprop{pdfaType:prefix} to better support conversion of the
 %   document to \acro{PDF/A}}
 % \changes{v4.0}{2019/03/09}{Moved the header code from here into
 %   \protect\cs{hyxmp@begin@extension@decls} and the trailer code
@@ -4452,7 +4510,7 @@ ______________________</rdf:li>^^J%
       {Document creator's contact information}
 %    \end{macrocode}
 % We can't call |\hyxmp@end@ext@decl| because we need first need to
-% define the \xmpterm{Iptc4xmpCore:ContactInfo} structure.
+% define the \xmpprop{Iptc4xmpCore:ContactInfo} structure.
 %    \begin{macrocode}
   \hyxmp@add@to@xml{%
 ______________</rdf:Seq>^^J%
@@ -4589,8 +4647,8 @@ __________</rdf:li>^^J%
 % \begin{macro}{\hyxmp@declare@extensions}
 % Declare all \acro{XMP} extension schemata.  We'll always have at least
 % one, the \acro{XMP} Media Management extensions, because we
-% automatically generate \xmpterm{xmpMM:DocumentID} and
-% \xmpterm{xmpMM:InstanceID}
+% automatically generate \xmpprop{xmpMM:DocumentID} and
+% \xmpprop{xmpMM:InstanceID}
 % values.
 %    \begin{macrocode}
 \newcommand*{\hyxmp@declare@extensions}{%
-- 
cgit v1.2.3

