[latex3-commits] [git/LaTeX3-latex3-pdfresources] testlinkstuff: corrections and pageresources (fa027c1)
Ulrike Fischer
fischer at troubleshooting-tex.de
Sat May 11 23:32:31 CEST 2019
Repository : https://github.com/latex3/pdfresources
On branch : testlinkstuff
Link : https://github.com/latex3/pdfresources/commit/fa027c10506e63b1cfa396480492ef622ce9ff43
>---------------------------------------------------------------
commit fa027c10506e63b1cfa396480492ef622ce9ff43
Author: Ulrike Fischer <fischer at troubleshooting-tex.de>
Date: Sat May 11 23:32:31 2019 +0200
corrections and pageresources
>---------------------------------------------------------------
fa027c10506e63b1cfa396480492ef622ce9ff43
pdfresources.dtx | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 101 insertions(+), 6 deletions(-)
diff --git a/pdfresources.dtx b/pdfresources.dtx
index f7b9797..2f01cea 100644
--- a/pdfresources.dtx
+++ b/pdfresources.dtx
@@ -125,8 +125,6 @@
% Currently only pdftex, luatex and xetex are setup. Some commands can probably not be
% implemented in all drivers.
% % still needed:
-% % \saveboxresource/ \pdfxform
-% % \lastsavedboxresourceindex / \pdflastxform
% % \pdf at strcmp??
% % \pdf at escapestring?? \pdfescapestring
% \begin{macrocode}
@@ -163,6 +161,8 @@
{
\tex_pdfrefxform:D \int_use:c { c__driver_pdf_xform_ \tl_to_str:n {#1} _int } \scan_stop:
}
+
+% should there be a test if the name exists???
\cs_new:Npn \driver_pdf_xform_ref:n #1
{ \int_use:c { c__driver_pdf_xform_ \tl_to_str:n {#1} _int } ~ 0 ~ R }
@@ -218,8 +218,7 @@
% getter from the prop:
\cs_new_protected:Npn \driver_pdf_pagesattr_get:nN #1 #2
{
- \prop_get:NnN \g_@@_pdf_pagesattr_prop { #1 }
- \@@_pdf_pagesattr_gpush:
+ \prop_get:NnN \g_@@_pdf_pagesattr_prop { #1 } #2
}
% remove:
@@ -301,8 +300,7 @@
% getter from the prop:
\cs_new_protected:Npn \driver_pdf_pageattr_get:nN #1 #2
{
- \prop_get:NnN \g_@@_pdf_pageattr_prop { #1 }
- \@@_pdf_pageattr_gpush:
+ \prop_get:NnN \g_@@_pdf_pageattr_prop { #1 } #2
}
% remove:
@@ -359,7 +357,104 @@
%</package>
% \end{macrocode}
+% \subsection{pdfpageresources}
+% We need code for ExtGState, ColorSpace, Pattern, Shading and Properties.
+% All are dictionaries which can receive entries from more than one source.
+% We follow the pgf code: for all objects are reserved which are written at end document.
+% This means that pages that uses the entries share the same resource. So removing
+% entries makes no sense.
+% \begin{macrocode}
+%<*package>
+ \clist_const:Nn \c_@@_pdf_pageresources_clist
+ {
+ ExtGState,
+ ColorSpace,
+ Pattern,
+ Shading,
+ Properties
+ }
+
+ \prop_new:N \g_@@_pdf_pageresources_prop
+
+ \clist_map_inline:Nn \c_@@_pdf_pageresources_clist
+ {
+ \prop_new:c {g_@@_pdf_page_#1_prop}
+ \driver_pdf_object_new:nn {g_@@_pdf_page_#1_obj}{dict}
+ \bool_new:c {g_@@_pdf_page_#1_bool}
+ }
+
+
+
+% setter: add test for existence?? #1 is always the "name"
+\cs_new_protected:Npn \driver_pdf_pageresources_gput:nnn #1 #2 #3
+ {
+ \prop_gput:cnn { g_@@_pdf_page_#1_prop} { #2 }{ #3 }
+ \bool_if:cF {g_@@_pdf_page_#1_bool}
+ {
+ \prop_gput:Nnx \g_@@_pdf_pageresources_prop
+ {#1}
+ {\driver_pdf_object_ref:n {g_@@_pdf_page_#1_obj}}
+ \@@_pdf_pageresources_gpush:
+ }
+ \bool_gset_true:c {g_@@_pdf_page_#1_bool}
+ }
+
%
+%% push to the register
+\cs_new_protected:Npn \@@_pdf_pageresources_gpush:
+ {
+ \exp_args:NNx \tex_global:D \@@_pdf_pageresources:n
+ {
+ \prop_map_function:NN \g_@@_pdf_pageresources_prop \driver_pdf_dict_item:nn
+ }
+ }
+
+%to be able to test if someone tampered with the resources:
+\sys_if_engine_pdftex:T
+{
+ \cs_new_protected:Npn \driver_pdf_pageresources_get:N #1
+ {
+ \tl_set:Nx #1 {\tex_the:D \tex_pdfpageresources:D}
+ }
+}
+
+\sys_if_engine_luatex:T
+{
+ \cs_new_protected:Npn \driver_pdf_pageresources_get:N #1
+ {
+ \tl_set:Nx #1 {\tex_the:D \tex_pdfvariable:D pageresources}
+ }
+}
+
+\bool_if:nT { \sys_if_engine_pdftex_p: || \sys_if_engine_luatex_p: }
+{
+ \cs_new_protected:Npx \@@_pdf_pageresources:n #1
+ {
+ \exp_not:N \tex_global:D
+ \cs_if_exist:NTF \tex_pdfpageresources:D
+ { \tex_pdfpageresources:D }
+ { \tex_pdfvariable:D pageresources }
+ {#1}
+ }
+}
+
+\AtEndDocument
+ {
+ \clist_map_inline:Nn \c_@@_pdf_pageresources_clist
+ {
+ \bool_if:cT { g_@@_pdf_page_#1_bool }
+ {
+ \exp_args:Nnx
+ \driver_pdf_object_write:nn { g_@@_pdf_page_#1_obj }
+ {
+ \prop_map_function:cN { g_@@_pdf_page_#1_prop} \driver_pdf_dict_item:nn
+ }
+ }
+ }
+ }
+
+%</package>
+% \end{macrocode}
% \subsubsection{other stuff}
% \begin{macrocode}
%<*package>
More information about the latex3-commits
mailing list