[latex3-commits] [git/LaTeX3-latex3-pdfresources] splitting: storing, but broken (8ab69f3)
Ulrike Fischer
fischer at troubleshooting-tex.de
Wed Jul 1 15:05:06 CEST 2020
Repository : https://github.com/latex3/pdfresources
On branch : splitting
Link : https://github.com/latex3/pdfresources/commit/8ab69f3da8301cd2aaf3ef5ec869e98503ce7b3c
>---------------------------------------------------------------
commit 8ab69f3da8301cd2aaf3ef5ec869e98503ce7b3c
Author: Ulrike Fischer <fischer at troubleshooting-tex.de>
Date: Wed Jul 1 15:05:06 2020 +0200
storing, but broken
>---------------------------------------------------------------
8ab69f3da8301cd2aaf3ef5ec869e98503ce7b3c
l3pdffile.dtx | 116 +++++++++++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 94 insertions(+), 22 deletions(-)
diff --git a/l3pdffile.dtx b/l3pdffile.dtx
index dabf078..823a603 100644
--- a/l3pdffile.dtx
+++ b/l3pdffile.dtx
@@ -113,7 +113,7 @@
% \end{verbatim}
% The strings (keys) in the /Names dictionary must be sorted lexically. But they
% don't have to be the file name or anything related to the file name. So the code will
-% use l3emb0001, l3emb0002. The key used for a is perhaps needed once:
+% use l3emb0001, l3emb0002. The key used for it is perhaps needed once:
% to identify the start file in a collection, so there must be a way to retrieve it.
%
% \item Through the /AF key in various objects (pdf 2.0). The value is normally an array of object
@@ -200,12 +200,12 @@
% are preset in the dictionary:
%
% \begin{tabular}{lll}
-% dictionary & key & value\\\hline
-% file & Type & /EmbeddedFile\\
+% dictionary & key & value\\\hline
+% file & Type & /EmbeddedFile\\
% file/Params& Size & \cs{file_size:n}\\
% file/Params& ModDate & (\cs{file_timestamp:n})\\
% file/Params& CheckSum & (\cs{file_mdfive_hash:n})\\
-% file/FileSpec & Type & /FileSpec\\
+% file/FileSpec & Type & /FileSpec\\
% file/FileSpec & AFRelationship &Unspecified
%
% \end{tabular}
@@ -252,7 +252,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-%<@@=pdf>
+%<@@=pdffile>
\cs_set_eq:NN \@@_file_filename_convert_to_print:nN \pdftool_textstringhex_print:nN
% \end{macrocode}
% \subsection{Messages}
@@ -291,7 +291,9 @@
% \begin{variable}
% {
% \l_@@_file_tmpa_tl,
+% \l_@@_file_tmpb_tl,
% \l_@@_file_tmpa_str,
+% \l_@@_file_tmpb_str,
% \l_@@_file_ext_str,
% \l_@@_file_automimetype_tl
% }
@@ -335,7 +337,7 @@
% \end{variable}
% \begin{macrocode}
\str_new:N \l_pdffile_source_full_name_str
-\str_new:N \l_pdffile_full_name_convert_str
+\str_new:N \l_pdffile_full_name_convert_str %???
% \end{macrocode}
% Here we define and setup the local dictionaries. We also define constants.
% \begin{macrocode}
@@ -357,22 +359,25 @@
% \end{macrocode}
%
-% \begin{macro}{\pdffile_embed:nnn}
+% \begin{macro}{\pdffile_embed_file:nnn, \pdffile_embed_stream:nnn}
+% At first a command to set the mimetype. It either uses the current value
+% in the file dictionary, or tries to guess it from the extension.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_file_mimetype_set:NN #1 #2 %#1 file name, #2 tl for guessed mimetype
+\cs_new_protected:Npn \@@_file_mimetype_set:nN #1 #2 %#1 file name, #2 tl for guessed mimetype
{
- \file_parse_full_name:VNNN
- #1
- \l_tmpa_tl
- \l_tmpb_tl
+ \file_parse_full_name:nNNN
+ {#1}
+ \l_@@_file_tmpa_str %unneeded
+ \l_@@_file_tmpb_str %unneeded
\l_@@_file_ext_str
%check if Subtype has been set
\pdfdict_get:nnN {file}{Subtype}\l_@@_file_tmpa_tl
+ %if not look up in the prop:
\quark_if_no_value:NT \l_@@_file_tmpa_tl
{
- \prop_get:NVNTF \g_pdffile_mimetypes_prop \l_@@_file_ext_str \l_tmpa_tl
+ \prop_get:NVNTF \g_pdffile_mimetypes_prop \l_@@_file_ext_str \l_@@_file_tmpb_tl
{
- \tl_set:Nx #2 {/Subtype~\pdftool_name_print:V \l_tmpa_tl}
+ \tl_set:Nx #2 {/Subtype~\pdftool_name_print:V \l_@@_file_tmpb_tl}
}
{
\msg_warning:nnx { pdffile }{ mimetype-missing} {#1}
@@ -381,7 +386,13 @@
}
}
-\cs_new_protected:Npn \@@_file_fstream_write:NN #1 #2 %#1 file name, #2 guessed mimetype
+\cs_generate_variant:Nn \@@_file_mimetype_set:nN {VN}
+
+\cs_new_protected:Npn \@@_file_fstream_write:nN #1 #2
+ %#1 file name,
+ %#2 tl, should be empty or contain /Subtype /mimtype
+ % e.g. result from \@@_file_mimetype_set:NN
+
{
\pdf_object_now:nx { fstream }
{
@@ -401,7 +412,11 @@
\tl_clear:N \l_@@_file_automimetype_tl
}
-\cs_new_protected:Npn \@@_file_filespec_write:nnn #1 #2 #3 %#1 dict, #2 target file name, #3 object ref
+\cs_generate_variant:Nn \@@_file_fstream_write:nN {VN}
+
+\cs_new_protected:Npn \@@_file_filespec_write:nnn #1 #2 #3 %#1 name of dict object,
+ %#2 target file name,
+ %#3 object ref
{
\tl_if_blank:nT { #2 }
{
@@ -411,7 +426,7 @@
\pdf_object_new:nn { #1 } {dict}
\group_begin:
\@@_file_filename_convert_to_print:nN { #2 } \l_@@_file_tmpa_str
- \str_show:N\l_@@_file_tmpa_str
+ %\str_show:N\l_@@_file_tmpa_str
\pdfdict_put:nnx {file/FileSpec}{F} { \l_@@_file_tmpa_str }
\pdfdict_put:nnx {file/FileSpec}{UF}{ \l_@@_file_tmpa_str }
\pdf_object_write:nx { #1 }
@@ -432,10 +447,64 @@
\prop_new:N \g_@@_file_embed_sources_prop
\cs_new_protected:Npn \pdffile_embed_file:nnn #1 #2 #3
- %\Arg{source filename} \Arg{target filename} \Arg{ object name }
+ %\Arg{source filename} \Arg{target filename} \Arg{ file object name }
{ % if #1 empty => only filespec
% if #2 empty => = #1
- \pdf_object_if_exist:nTF { #3 }
+ \pdf_object_if_exist:nTF { @@_#3 }
+ {
+ \msg_error:nnn { pdffile }{ object-exists } { #3 }
+ }
+ {
+ \tl_if_blank:nTF { #1 }
+ {
+ \tl_set:Nn \l_@@_file_embed_ref_tl {}
+ }
+ {
+ \file_get_full_name:nNTF {#1} \l_pdffile_source_full_name_str
+ {
+ \prop_gput:NnV
+ \g_@@_file_embed_sources_prop
+ { #3 }
+ \l_pdffile_source_full_name_str
+ \@@_file_mimetype_set:VN
+ \l_pdffile_source_full_name_str
+ \l_@@_file_automimetype_tl
+ \@@_file_fstream_write:VN
+ \l_pdffile_source_full_name_str
+ \l_@@_file_automimetype_tl
+ \tl_set:Nx \l_@@_file_embed_ref_tl { \pdf_object_last: }
+ }
+ {
+ \msg_error:nnn { pdffile }{ file-not-found }{ #1 }
+ }
+
+ }
+ \tl_if_blank:nTF { #2 }
+ {
+ \exp_args:Nnnx
+ \@@_file_filespec_write:nnn
+ %#1 dict, #2 target file name, #3 object ref
+ { @@_#3 }
+ { #1 }
+ {\l_@@_file_embed_ref_tl}
+ }
+ {
+ \exp_args:Nnnx
+ \@@_file_filespec_write:nnn
+ %#1 dict, #2 target file name, #3 object ref
+ { @@_#3 }
+ { #2 }
+ {\l_@@_file_embed_ref_tl}
+ }
+ }
+ }
+
+
+\cs_new_protected:Npn \pdffile_embed_stream:nnn #1 #2 #3
+ %\Arg{source filename} \Arg{target filename} \Arg{ file object name }
+ { % if #1 empty => only filespec
+ % if #2 empty => = #1
+ \pdf_object_if_exist:nTF { @@_#3 }
{
\msg_error:nnn { pdffile }{ object-exists } { #3 }
}
@@ -469,7 +538,7 @@
\exp_args:Nnnx
\@@_file_filespec_write:nnn
%#1 dict, #2 target file name, #3 object ref
- { #3 }
+ { @@_#3 }
{ #1 }
{\l_@@_file_embed_ref_tl}
}
@@ -477,14 +546,17 @@
\exp_args:Nnnx
\@@_file_filespec_write:nnn
%#1 dict, #2 target file name, #3 object ref
- { #3 }
+ { @@_#3 }
{ #2 }
{\l_@@_file_embed_ref_tl}
}
}
}
-
+\cs_new:Npn \pdffile_embed_ref:n #1 % #1 is the symbolic name used above
+ {
+ \pdf_object_ref:n {@@_#1}
+ }
% \end{macrocode}
% \end{macro}
More information about the latex3-commits
mailing list.