[latex3-commits] [git/LaTeX3-latex3-pdfresources] reworking-annot: renamed string convert functions, added url (69f0811)
Ulrike Fischer
fischer at troubleshooting-tex.de
Sun Jan 10 00:59:32 CET 2021
Repository : https://github.com/latex3/pdfresources
On branch : reworking-annot
Link : https://github.com/latex3/pdfresources/commit/69f081157272b60711e29af98713547224488a52
>---------------------------------------------------------------
commit 69f081157272b60711e29af98713547224488a52
Author: Ulrike Fischer <fischer at troubleshooting-tex.de>
Date: Sun Jan 10 00:59:32 2021 +0100
renamed string convert functions, added url
>---------------------------------------------------------------
69f081157272b60711e29af98713547224488a52
experiments/uri-encoding-tests.tex | 47 +---------
hyperref-generic.dtx | 28 +++---
l3pdffile.dtx | 4 +-
l3pdftools.dtx | 175 +++++++++++++++++++------------------
testfiles-dvips/embedfile.pvt | 4 +-
testfiles/embedfile.pvt | 4 +-
testfiles/infodict.pvt | 2 +-
testfiles/text-convert.lvt | 8 +-
8 files changed, 122 insertions(+), 150 deletions(-)
diff --git a/experiments/uri-encoding-tests.tex b/experiments/uri-encoding-tests.tex
index 5f18415..f7cb664 100644
--- a/experiments/uri-encoding-tests.tex
+++ b/experiments/uri-encoding-tests.tex
@@ -2,48 +2,9 @@
\RequirePackage{pdfmanagement}
\DeclareDocumentMetadata{uncompress,pdfversion=1.7}
\documentclass{article}
+
\usepackage{hyperref}
\usepackage{parskip}
-\ExplSyntaxOn
-\sys_if_engine_pdftex:TF
- {
- \cs_new_protected:cpn { __pdf_text_convert_string-url:nN } #1 #2
- {
- \str_set_convert:Nnnn #2 { #1 }{ utf8 } {utf8/url}
- \exp_args:NNx\str_replace_all:Nnn #2 {\c_percent_str 3A} {:}
- \exp_args:NNx\str_replace_all:Nnn #2 {\c_percent_str 2F} {/}
- \exp_args:NNxx\str_replace_all:Nnn #2 {\c_percent_str 23} {\c_hash_str}
- }
-
- \cs_new_protected:cpn { __pdf_text_convert_string-url-print:nN } #1 #2
- {
- \str_set_convert:Nnnn #2 { #1 }{ utf8 } {utf8/url}
- \exp_args:NNx\str_replace_all:Nnn #2 {\c_percent_str 3A} {:}
- \exp_args:NNx\str_replace_all:Nnn #2 {\c_percent_str 2F} {/}
- \exp_args:NNxx\str_replace_all:Nnn #2 {\c_percent_str 23} {\c_hash_str}
- \str_put_left:Nn #2 {(}
- \str_put_right:Nn #2 {)}
- }
- }
- {
- \cs_new_protected:cpn { __pdf_text_convert_string-url:nN } #1 #2
- {
- \str_set_convert:Nnnn #2 { #1 }{ } {utf8/url}
- \exp_args:NNx\str_replace_all:Nnn #2 {\c_percent_str 3A} {:}
- \exp_args:NNx\str_replace_all:Nnn #2 {\c_percent_str 2F} {/}
- \exp_args:NNxx\str_replace_all:Nnn #2 {\c_percent_str 23} {\c_hash_str}
- }
-
- \cs_new_protected:cpn { __pdf_text_convert_string-url-print:nN } #1 #2
- {
- \str_set_convert:Nnnn #2 { #1 }{ } {utf8/url}
- \exp_args:NNx\str_replace_all:Nnn #2 {\c_percent_str 3A} {:}
- \exp_args:NNx\str_replace_all:Nnn #2 {\c_percent_str 2F} {/}
- \exp_args:NNxx\str_replace_all:Nnn #2 {\c_percent_str 23} {\c_hash_str}
- \str_put_left:Nn #2 {(}
- \str_put_right:Nn #2 {)}
- }
- }
\ExplSyntaxOff
\begin{document}
@@ -55,7 +16,7 @@
\href{https://ja.wikipedia.org/wiki/エリザベス1世_(イングランド女王}{japanese}
\ExplSyntaxOn
-\tl_set:Nn \l__hyp_text_enc_uri_print_tl {string-lit-print}
+\tl_set:Nn \l__hyp_text_enc_uri_print_tl {utf16/string-print}
\ExplSyntaxOff
\section{Test 2}
@@ -66,7 +27,7 @@
\href{https://ja.wikipedia.org/wiki/エリザベス1世_(イングランド女王}{japanese}
\ExplSyntaxOn
-\tl_set:Nn \l__hyp_text_enc_uri_print_tl {string-hex-print}
+\tl_set:Nn \l__hyp_text_enc_uri_print_tl {utf16/hex-print}
\ExplSyntaxOff
\section{Test 3}
@@ -77,7 +38,7 @@
\href{https://ja.wikipedia.org/wiki/エリザベス1世_(イングランド女王}{japanese}
\ExplSyntaxOn
-\tl_set:Nn \l__hyp_text_enc_uri_print_tl {string-url-print}
+\tl_set:Nn \l__hyp_text_enc_uri_print_tl {utf8/url-print}
\ExplSyntaxOff
\section{Test 4}
diff --git a/hyperref-generic.dtx b/hyperref-generic.dtx
index 22a938f..18646ca 100644
--- a/hyperref-generic.dtx
+++ b/hyperref-generic.dtx
@@ -698,12 +698,12 @@
\tl_new:N \l_@@_text_enc_file_print_tl
\tl_new:N \l_@@_text_enc_para_print_tl
-\tl_set:Nn \l_@@_text_enc_uri_print_tl {string-dest-print}
-\tl_set:Nn \l_@@_text_enc_info_print_tl {string-hex-print}
-\tl_set:Nn \l_@@_text_enc_dest_tl {string-dest}
-\tl_set:Nn \l_@@_text_enc_dest_print_tl {string-dest-print}
-\tl_set:Nn \l_@@_text_enc_file_print_tl {string-dest-print}
-\tl_set:Nn \l_@@_text_enc_para_print_tl {string-dest-print}
+\tl_set:Nn \l_@@_text_enc_uri_print_tl {utf8/url-print}
+\tl_set:Nn \l_@@_text_enc_info_print_tl {utf16/hex-print}
+\tl_set:Nn \l_@@_text_enc_dest_tl {utf8/string}
+\tl_set:Nn \l_@@_text_enc_dest_print_tl {utf8/string-print}
+\tl_set:Nn \l_@@_text_enc_file_print_tl {utf8/string-print}
+\tl_set:Nn \l_@@_text_enc_para_print_tl {utf8/string-print}
% \end{macrocode}
% \end{variable}
% \begin{variable}{\l_@@_dest_pdfview_tl}
@@ -787,12 +787,14 @@
% \#2 is str variable,
% \#1 should be
% \begin{tabular}{ll}
-% string-dest-print & \texttt{(lit)} (utf8/string)\\
-% string-dest & \texttt{lit} (utf8/string)\\
-% string-hex-print & \texttt{<HEX>} (utf16/hex)\\
-% string-hex & \texttt{HEX} (utf16/hex)\\
-% string-lit_print & \texttt{(lit)} (utf16/string)\\
-% string-lit & \texttt{lit} (utf16/string)
+% utf8/string-print & \texttt{(lit)} (utf8/string)\\
+% utf8/string & \texttt{lit} (utf8/string)\\
+% utf8/url-print & \texttt{(percent encoded url)}\\
+% utf8/url & \texttt{percent encoded url}\\
+% utf16/hex-print & \texttt{<HEX>} (utf16/hex)\\
+% utf16/hex & \texttt{HEX} (utf16/hex)\\
+% utf16/string_print & \texttt{(lit)} (utf16/string)\\
+% utf16/string-lit & \texttt{lit} (utf16/string)
% \end{tabular}
% \begin{macrocode}
\cs_new_protected:Npn \@@_text_convert:nN #1 #2
@@ -828,7 +830,7 @@
%^^A \char_set_catcode_active:N \~
% \begin{macrocode}
\cs_new_protected:Npn\Hy at pstringdef #1 #2
- { \@@_text_pdfstring:xnN {#2} {string-lit}#1 }
+ { \@@_text_pdfstring:xnN {#2} {utf8/string}#1 }
% \end{macrocode}
% This is a special version for info keys:
% \begin{macrocode}
diff --git a/l3pdffile.dtx b/l3pdffile.dtx
index a5ec484..d6396fe 100644
--- a/l3pdffile.dtx
+++ b/l3pdffile.dtx
@@ -348,7 +348,7 @@
% %set the relationship:
% \pdfdict_put:nnn {l_file/FileSpec} {AFRelationship}{/Source}
% %set the description key. The text must first be converted:
-% \pdf_text_convert:nnN {string-lit-print}
+% \pdf_text_convert:nnN {utf16/string-print}
% {this~is~an~odd~description~with~öäü}
% \l_tmpa_str
% \pdfdict_put:nnx {l_file/FileSpec} {Desc}{\l_tmpa_str}
@@ -377,7 +377,7 @@
% \begin{macrocode}
%<@@=pdffile>
\cs_new_protected:Npn \@@_filename_convert_to_print:nN #1 #2
- {\pdf_text_convert:nnN {string-hex-print}{#1}{#2}}
+ {\pdf_text_convert:nnN {utf16/hex-print}{#1}{#2}}
% \end{macrocode}
% \subsection{Messages}
% \begin{macrocode}
diff --git a/l3pdftools.dtx b/l3pdftools.dtx
index 3b199e9..30f6211 100644
--- a/l3pdftools.dtx
+++ b/l3pdftools.dtx
@@ -75,7 +75,7 @@
% \begin{function}[added=2020-07-04]
% {\pdf_text_convert:nnN}
% \begin{syntax}
-% \cs{pdf_text_convert:nn} \Arg{format} \Arg{content} \Arg{tlvar}
+% \cs{pdf_text_convert:nnN} \Arg{format} \Arg{content} \Arg{tlvar}
% \end{syntax}
% This converts \Arg{content} following the rules defined by \Arg{format} and stores
% the result in \Arg{tlvar}. The assignment is done locally.
@@ -84,17 +84,23 @@
% \begin{description}
% \item[name] see above
% \item[name-print] see above
-% \item[string-dest]
+% \item[utf8/string]
% this converts with \cs{\str_set_convert:Nnnn} into utf8/string.
-% \item[string-dest-print]
+% \item[utf8/string-print]
% this converts into utf8/string and add parentheses around.%
-% \item[string-lit]
+% \item[utf8/url]
+% this converts with \cs{\str_set_convert:Nnnn} into utf8/url and
+% then replace :, / and hash back from the percent encoding
+% \item[utf8/url-print]
+% this converts into utf8/url, replace color, slash and hash back,
+% and add parentheses around.%
+% \item[utf16/string]
% this converts with \cs{\str_set_convert:Nnnn} into utf16/string.
-% \item[string-lit-print]
+% \item[utf16/string-print]
% this converts into utf16/string and add parentheses around.
-% \item[string-hex]
+% \item[utf16/hex]
% this converts into utf16/hex
-% \item[string-hex-print]
+% \item[utf16/hex-print]
% this converts into utf16/hex and add bracket around.
% \end{description}
% \end{function}
@@ -214,7 +220,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage {l3pdftools} {2020-07-04} {0.1}
+\ProvidesExplPackage {l3pdftools} {2021-01-09} {0.2}
{various PDF tools}
% \end{macrocode}
%
@@ -288,15 +294,29 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{ @@_text_convert_string-dest:nN }
-% \begin{macro}{ @@_text_convert_string-dest-print:nN }
-% \begin{macro}{ @@_text_convert_string-lit:nN }
-% \begin{macro}{ @@_text_convert_string-lit-print:nN }
-% \begin{macro}{ @@_text_convert_string-hex:nN }
-% \begin{macro}{ @@_text_convert_string-hex-print:nN }
+% \begin{variable}{\c_@@_text_utfsrc_str}
+% The convert command must use a different value the source encoding
+% depending on the engines.
% \begin{macrocode}
-% TODO Names need a review when it is clear which converters
-% are actually needed
+\sys_if_engine_pdftex:TF
+ {
+ \str_const:Nn \c_@@_text_utfsrc_str {utf8}
+ }
+ {
+ \str_const:Nn \c_@@_text_utfsrc_str {}
+ }
+% \end{macrocode}
+% \begin{macro}{ @@_text_convert_utf8/string:nN }
+% \begin{macro}{ @@_text_convert_utf8/string-print:nN }
+% \begin{macro}{ @@_text_convert_utf8/url:nN }
+% \begin{macro}{ @@_text_convert_utf8/url-print:nN }
+% \begin{macro}{ @@_text_convert_utf16/string:nN }
+% \begin{macro}{ @@_text_convert_utf16/string-print:nN }
+% \begin{macro}{ @@_text_convert_utf16/hex:nN }
+% \begin{macro}{ @@_text_convert_utf16/hex-print:nN }
+% \begin{macrocode}
+%% TODO Names need a review when it is clear which converters
+%% are actually needed
%% string conversions and printing
%% we assume here that the text purify step has been done. The input is
%% a list of (utf8) chars.
@@ -310,92 +330,77 @@
% bookmarks: as pdfoutline uses () currently only utf16 with BE is usable.
% check if one can use HEX too when directly writing the object
+% ==========
% uri: utf16BE/string seems not to work, hex neither
-% utf8/string works
+% utf8/string works but not on macos,
+% so a specfic utf8/url variant is needed
+% ==========
% "input" is utf8 for pdftex, empty (native) for unicode engine
% commands to output literal strings (...)
-\sys_if_engine_pdftex:TF
+
+\cs_new_protected:cpx { @@_text_convert_utf8/string:nN } #1 #2
{
- \cs_new_protected:cpn { @@_text_convert_string-dest:nN } #1 #2
- {
- \str_set_convert:Nnnn #2 { #1 }{ utf8 } {utf8/string}
- }
+ \exp_not:N \str_set_convert:Nnnn #2
+ { #1 }
+ { \c_@@_text_utfsrc_str }
+ {utf8/string}
+ }
- \cs_new_protected:cpn { @@_text_convert_string-dest-print:nN } #1 #2
- {
- \str_set_convert:Nnnn #2 { #1 }{ utf8 } {utf8/string}
- \str_put_left:Nn #2 {(}
- \str_put_right:Nn #2 {)}
- }
+\cs_new_protected:cpx { @@_text_convert_utf8/string-print:nN } #1 #2
+ {
+ \exp_not:N \use:c { @@_text_convert_utf8/string:nN } { #1 } #2
+ \str_put_left:Nn #2 {(}
+ \str_put_right:Nn #2 {)}
}
+% special url command:
+\cs_new_protected:cpx { @@_text_convert_utf8/url:nN } #1 #2
{
- \cs_new_protected:cpn { @@_text_convert_string-dest:nN } #1 #2
- {
- \str_set_convert:Nnnn #2 { #1 }{ } {utf8/string}
- }
-
- \cs_new_protected:cpn { @@_text_convert_string-dest-print:nN } #1 #2
- {
- \str_set_convert:Nnnn #2 { #1 }{ } {utf8/string}
- \str_put_left:Nn #2 {(}
- \str_put_right:Nn #2 {)}
- }
+ \exp_not:N \str_set_convert:Nnnn #2
+ { #1 }
+ { \c_@@_text_utfsrc_str }
+ {utf8/url}
+ \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 3A} {:}
+ \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 2F} {/}
+ \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 23} {\c_hash_str}
}
-\sys_if_engine_pdftex:TF
+\cs_new_protected:cpx { @@_text_convert_utf8/url-print:nN } #1 #2
{
- \cs_new_protected:cpn { @@_text_convert_string-lit:nN } #1 #2
- {
- \str_set_convert:Nnnn #2 { #1 }{ utf8 } {utf16/string}
- }
-
- \cs_new_protected:cpn { @@_text_convert_string-lit-print:nN } #1 #2
- {
- \str_set_convert:Nnnn #2 { #1 }{ utf8 } {utf16/string}
- \str_put_left:Nn #2 {(}
- \str_put_right:Nn #2 {)}
- }
+ \exp_not:N \use:c { @@_text_convert_utf8/url:nN } {#1} #2
+ \exp_not:N \str_put_left:Nn #2 {(}
+ \exp_not:N \str_put_right:Nn #2 {)}
}
+% with utf16 with BE marker
+\cs_new_protected:cpx { @@_text_convert_utf16/string:nN } #1 #2
{
- \cs_new_protected:cpn { @@_text_convert_string-lit:nN } #1 #2
- {
- \str_set_convert:Nnnn #2 { #1 }{ } {utf16/string}
- }
+ \exp_not:N \str_set_convert:Nnnn #2
+ { #1 }
+ { \c_@@_text_utfsrc_str }
+ {utf16/string}
+ }
- \cs_new_protected:cpn { @@_text_convert_string-lit-print:nN } #1 #2
- {
- \str_set_convert:Nnnn #2 { #1 }{ } {utf16/string}
- \str_put_left:Nn #2 {(}
- \str_put_right:Nn #2 {)}
- }
+\cs_new_protected:cpx { @@_text_convert_utf16/string-print:nN } #1 #2
+ {
+ \exp_not:N \use:c { @@_text_convert_utf16/string:nN } {#1} #2
+ \exp_not:N \str_put_left:Nn #2 {(}
+ \exp_not:N \str_put_right:Nn #2 {)}
}
+
% commands to output hex strings (...)
-\sys_if_engine_pdftex:TF
+\cs_new_protected:cpx { @@_text_convert_utf16/hex:nN } #1 #2
{
- \cs_new_protected:cpn { @@_text_convert_string-hex:nN } #1 #2
- {
- \str_set_convert:Nnnn #2 { #1 }{ utf8 } {utf16/hex}
- }
- \cs_new_protected:cpn { @@_text_convert_string-hex-print:nN } #1 #2
- {
- \str_set_convert:Nnnn #2 { #1 }{ utf8 } {utf16/hex}
- \str_put_left:Nn #2 {<}
- \str_put_right:Nn #2 {>}
- }
+ \exp_not:N \str_set_convert:Nnnn #2
+ { #1 }
+ { \c_@@_text_utfsrc_str }
+ {utf16/hex}
}
- {
- \cs_new_protected:cpn { @@_text_convert_string-hex:nN } #1 #2
- {
- \str_set_convert:Nnnn #2 { #1 }{ } {utf16/hex}
- }
- \cs_new_protected:cpn { @@_text_convert_string-hex-print:nN } #1 #2
- {
- \str_set_convert:Nnnn #2 { #1 }{ } {utf16/hex}
- \str_put_left:Nn #2 {<}
- \str_put_right:Nn #2 {>}
- }
+\cs_new_protected:cpx { @@_text_convert_utf16/hex-print:nN } #1 #2
+ {
+ \exp_not:N \use:c { @@_text_convert_utf16/hex:nN } {#1} #2
+ \exp_not:N \str_put_left:Nn #2 {<}
+ \exp_not:N \str_put_right:Nn #2 {>}
}
% \end{macrocode}
@@ -403,6 +408,10 @@
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \subsubsection{BDC operator commands}
% \begin{macro}{\pdf_bdc:nn}
diff --git a/testfiles-dvips/embedfile.pvt b/testfiles-dvips/embedfile.pvt
index 4671b6c..3cb1aff 100644
--- a/testfiles-dvips/embedfile.pvt
+++ b/testfiles-dvips/embedfile.pvt
@@ -22,7 +22,7 @@ grüße
\ExplSyntaxOn
\group_begin:
\pdfdict_put:nnn {l_file/FileSpec} {AFRelationship}{/Source}
-\pdf_text_convert:nnN {string-lit-print} {this~is~something~odd~with~öäü}\l_tmpa_str
+\pdf_text_convert:nnN {utf16/string-print} {this~is~something~odd~with~öäü}\l_tmpa_str
\pdfdict_put:nnx {l_file/FileSpec} {Desc}{\l_tmpa_str}
\pdfdict_put:nnx {l_file/Params} {ModDate}{(D:20200422135851Z)}
\pdffile_embed_file:nnn {testinput.txt}{grüße.txt}{example1}
@@ -31,7 +31,7 @@ grüße
\group_begin:
\pdfdict_put:nnn {l_file/FileSpec} {AFRelationship}{/Source}
-\pdf_text_convert:nnN {string-lit-print} {this~is~something~odd~with~öäü}\l_tmpa_str
+\pdf_text_convert:nnN {utf16/string-print} {this~is~something~odd~with~öäü}\l_tmpa_str
\pdfdict_put:nnx {l_file/FileSpec} {Desc}{\l_tmpa_str}
\pdfdict_put:nnx {l_file/Params} {ModDate}{(D:20200422155851+02'00')}
\pdffile_embed_file:nnn {grüße.txt}{echtegrüße.txt}{example2}
diff --git a/testfiles/embedfile.pvt b/testfiles/embedfile.pvt
index ea4529b..290964f 100644
--- a/testfiles/embedfile.pvt
+++ b/testfiles/embedfile.pvt
@@ -14,7 +14,7 @@ grüße
\ExplSyntaxOn
\group_begin:
\pdfdict_put:nnn {l_file/FileSpec} {AFRelationship}{/Source}
-\pdf_text_convert:nnN {string-lit-print} {this~is~something~odd~with~öäü}\l_tmpa_str
+\pdf_text_convert:nnN {utf16/string-print} {this~is~something~odd~with~öäü}\l_tmpa_str
\pdfdict_put:nnx {l_file/FileSpec} {Desc}{\l_tmpa_str}
\pdfdict_put:nnx {l_file/Params} {ModDate}{(D:20200422135851Z)}
\pdffile_embed_file:nnn {testinput.txt}{grüße.txt}{example1}
@@ -23,7 +23,7 @@ grüße
\group_begin:
\pdfdict_put:nnn {l_file/FileSpec} {AFRelationship}{/Source}
-\pdf_text_convert:nnN {string-lit-print} {this~is~something~odd~with~öäü}\l_tmpa_str
+\pdf_text_convert:nnN {utf16/string-print} {this~is~something~odd~with~öäü}\l_tmpa_str
\pdfdict_put:nnx {l_file/FileSpec} {Desc}{\l_tmpa_str}
\pdfdict_put:nnx {l_file/Params} {ModDate}{(D:20200422155851+02'00')}
\pdffile_embed_file:nnn {grüße.txt}{echtegrüße.txt}{example2}
diff --git a/testfiles/infodict.pvt b/testfiles/infodict.pvt
index 440ef1b..5f3cbcd 100644
--- a/testfiles/infodict.pvt
+++ b/testfiles/infodict.pvt
@@ -4,7 +4,7 @@
\input{regression-test}
\documentclass{article}
\ExplSyntaxOn
-\pdf_text_convert:nnN {string-lit-print}{Grüße}\l_tmpa_str
+\pdf_text_convert:nnN {utf16/string-print}{Grüße}\l_tmpa_str
\pdfmanagement_add:nnx {Info} {Title}{\l_tmpa_str}
\pdfmanagement_add:nnx {Info} {Author}{(Some~Author)}
\ExplSyntaxOff
diff --git a/testfiles/text-convert.lvt b/testfiles/text-convert.lvt
index d766fc6..dd3c95a 100644
--- a/testfiles/text-convert.lvt
+++ b/testfiles/text-convert.lvt
@@ -10,13 +10,13 @@
\pdf_text_convert:nn{name-print}{abc/abc}
\pdf_text_convert:nnN{name-print}{abc/abc}\x
\show\x
-\pdf_text_convert:nnN{string-lit}{abc/abc}\x
+\pdf_text_convert:nnN{utf16/string}{abc/abc}\x
\show\x
-\pdf_text_convert:nnN{string-lit-print}{abc/abc}\x
+\pdf_text_convert:nnN{utf16/string-print}{abc/abc}\x
\show\x
-\pdf_text_convert:nnN{string-hex}{abc/abc}\x
+\pdf_text_convert:nnN{utf16/hex}{abc/abc}\x
\show\x
-\pdf_text_convert:nnN{string-hex-print}{abc/abc}\x
+\pdf_text_convert:nnN{utf16/hex-print}{abc/abc}\x
\show\x
\ExplSyntaxOff
\end{document}
\ No newline at end of file
More information about the latex3-commits
mailing list.