summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/media9/pdfbase.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/media9/pdfbase.sty')
-rw-r--r--macros/latex/contrib/media9/pdfbase.sty323
1 files changed, 187 insertions, 136 deletions
diff --git a/macros/latex/contrib/media9/pdfbase.sty b/macros/latex/contrib/media9/pdfbase.sty
index a5cc1dcb44..67ff708ad5 100644
--- a/macros/latex/contrib/media9/pdfbase.sty
+++ b/macros/latex/contrib/media9/pdfbase.sty
@@ -156,15 +156,95 @@
%
% The Current Maintainer of this work is A. Grahn.
-\RequirePackage{l3keys2e}
+\def\g@pbs@date@tl{2022/08/04}
+\def\g@pbs@version@tl{0.55}
-\def\g@pbs@date@tl{2022/03/18}
-\def\g@pbs@version@tl{0.54}
-
-\NeedsTeXFormat{LaTeX2e}[2020-10-01]
+\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplPackage{pdfbase}{\g@pbs@date@tl}{\g@pbs@version@tl}
{driver~independent~access~to~low-level~PDF~features}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% package options
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\msg_gset:nnnn{pdfbase}{unknown~package~option}{Unknown~package~option~`#1'.}{
+ Package option~'#1'~is~unknown;\\
+ perhaps~it~is~spelled~incorrectly.
+}
+
+\bool_new:N\g_pbs_pkgbigfiles_bool
+\bool_new:N\g_pbs_dvipdfmx_bool
+\bool_new:N\g_pbs_dvisvgm_bool
+\str_new:N\g_pbs_backend_str
+
+\keys_define:nn{pdfbase}{
+ pdftex.code:n = {},
+ pdftex.value_forbidden:n = true,
+
+ luatex.code:n = {},
+ luatex.value_forbidden:n = true,
+
+ xetex.code:n = {},
+ xetex.value_forbidden:n = true,
+
+ dvips.code:n = {},
+ dvips.value_forbidden:n = true,
+
+ dvipdfmx .code:n = {
+ \str_gset:Nn\g_pbs_backend_str{dvipdfmx}
+ },
+ dvipdfmx .value_forbidden:n = true,
+
+ dvisvgm .code:n = {
+ \str_gset:Nn\g_pbs_backend_str{dvisvgm}
+ },
+ dvisvgm .value_forbidden:n = true,
+
+ bigfiles .bool_gset:N = \g_pbs_pkgbigfiles_bool,
+
+ unknown .code:n = {
+ \msg_error:nnx{pdfbase}{unknown~package~option}{\l_keys_key_tl}
+ }
+}
+\ProcessKeyOptions[pdfbase]
+
+% ensure that backend code is loaded
+% possible values for \c_sys_backend_str: pdftex, luatex, xetex, dvips, dvipdfmx, dvisvgm
+\cs_if_exist:NF\c_sys_backend_str{\sys_load_backend:n{}}
+
+\sys_if_output_pdf:TF{ % this excludes dvipdfmx, dvisvgm
+ \bool_gset_false:N\g_pbs_dvipdfmx_bool
+ \bool_gset_false:N\g_pbs_dvisvgm_bool
+}{
+ \str_case_e:nnF{\g_pbs_backend_str}{ % pdfbase options have precedence
+ {dvipdfmx}{
+ \bool_gset_true:N\g_pbs_dvipdfmx_bool
+ \bool_gset_false:N\g_pbs_dvisvgm_bool
+ }
+ {dvisvgm}{
+ \bool_gset_false:N\g_pbs_dvipdfmx_bool
+ \bool_gset_true:N\g_pbs_dvisvgm_bool
+ }
+ }{ % otherwise let the L3 backend code decide
+ \str_case_e:nn{\c_sys_backend_str}{
+ {dvisvgm}{
+ \bool_gset_false:N\g_pbs_dvipdfmx_bool
+ \bool_gset_true:N\g_pbs_dvisvgm_bool
+ }
+ {dvipdfmx}{
+ \bool_gset_true:N\g_pbs_dvipdfmx_bool
+ \bool_gset_false:N\g_pbs_dvisvgm_bool
+ }
+ }
+ }
+}
+
+\sys_if_engine_xetex:T{
+ \bool_if:NF\g_pbs_dvisvgm_bool{\bool_gset_true:N\g_pbs_dvipdfmx_bool}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
\int_new:N\g_pbs_page_int %abs. page counter
%creating global definitions
@@ -172,8 +252,7 @@
\msg_set:nnn{pdfbase}{rerun}{Rerun~to~get~internal~references~right!}
-%LaTeX2e wrapper
-\cs_new_nopar:Npn\pbs@seq@push@cx#1#2{
+\cs_new_protected_nopar:Npn\pbs@seq@push@cx#1#2{
\seq_if_exist:cF{#1}{\seq_new:c{#1}}
\seq_gput_right:cx{#1}{#2}
}
@@ -191,6 +270,8 @@
\seq_new:N\g_pbs_bop_seq
\seq_new:N\g_pbs_eop_seq
+\bool_new:N\g_pbs_lscape_bool %if we are inside landscape env
+\bool_new:N\g_pbs_ocgbase_loaded_bool
\AtBeginDocument{
\iow_now:Nx\@mainaux{
\token_to_str:N\providecommand\token_to_str:N\pbs@newkey[2]{}
@@ -198,65 +279,14 @@
\iow_now:Nx\@mainaux{
\token_to_str:N\providecommand\token_to_str:N\pbs@seq@push@cx[2]{}
}
-}
-
-%%%%%%%%%%%%%%%%%
-%package options
-%%%%%%%%%%%%%%%%%
-%unknown package option error message
-\msg_gset:nnnn{pdfbase}{unknown~package~option}{Unknown~package~option~`#1'.}{
- Package option~'#1'~is~unknown;\\
- perhaps~it~is~spelled~incorrectly.
-}
-
-\bool_new:N\g_pbs_pkgbigfiles_bool
-\bool_new:N\g_pbs_dvipdfmx_bool
-\bool_new:N\g_pbs_dvisvgm_bool
-\bool_new:N\g_pbs_lscape_bool %if we are inside landscape env
-\AtBeginDocument{
\cs_if_exist:NT\landscape{%
\tl_put_right:Nn\landscape{\bool_gset_true:N\g_pbs_lscape_bool}
\tl_put_left:Nn\endlandscape{\bool_gset_false:N\g_pbs_lscape_bool}
}
+ \@ifpackageloaded{ocgbase}{\bool_gset_true:N\g_pbs_ocgbase_loaded_bool}{}
}
-\keys_define:nn{pdfbase}{
- xetex .code:n = {}, %dummy, we use engine test instead
-
- dvipdfmx .choice:,
- dvipdfmx / true .code:n = {
- \bool_gset_true:N\g_pbs_dvipdfmx_bool
- \bool_gset_false:N\g_pbs_dvisvgm_bool
- },
- dvipdfmx / false .code:n = {\bool_gset_false:N\g_pbs_dvipdfmx_bool},
- dvipdfmx .default:n = {true},
-
- dvisvgm .choice:,
- dvisvgm / true .code:n = {
- \bool_gset_true:N\g_pbs_dvisvgm_bool
- \bool_gset_false:N\g_pbs_dvipdfmx_bool
- },
- dvisvgm / false .code:n = {\bool_gset_false:N\g_pbs_dvisvgm_bool},
- dvisvgm .default:n = {true},
-
- bigfiles .bool_gset:N = \g_pbs_pkgbigfiles_bool,
-
- unknown .code:n = {
- \msg_error:nnx{pdfbase}{unknown~package~option}{\l_keys_key_tl}
- }
-}
-\ProcessKeysOptions{pdfbase}
-
-\sys_if_output_pdf:T{
- \bool_gset_false:N\g_pbs_dvipdfmx_bool
- \bool_gset_false:N\g_pbs_dvisvgm_bool
-}
-
-\sys_if_engine_xetex:T{
- \bool_if:NF\g_pbs_dvisvgm_bool{\bool_gset_true:N\g_pbs_dvipdfmx_bool}
-}
-
-\cs_new_nopar:Nn\pbs_insert_properties_entry:{}
+\cs_new_protected_nopar:Nn\pbs_insert_properties_entry:{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%commands for creating PDF objects, annots etc.
@@ -281,7 +311,7 @@
\cs_set_protected:Npn\pdflastobj{\numexpr\pdffeedback~lastobj\relax}
\cs_set_protected:Npn\pdflastannot{\numexpr\pdffeedback~lastannot\relax}
\cs_set:Npn\pdfpageref{\pdffeedback~pageref}
- \cs_set:Npx\pdfpageresources{\pdfvariable~pageresources}
+ \cs_set_protected:Npx\pdfpageresources{\pdfvariable~pageresources}
\cs_set_eq:NN\pdfximage\saveimageresource
\cs_set_eq:NN\pdfrefximage\useimageresource
\cs_set_eq:NN\pdflastximage\lastsavedimageresourceindex
@@ -462,7 +492,7 @@
\cs_new_protected_nopar:Nn\pbs_pdfemc:{\pdfliteral~page~{EMC}}
%inserts /Properties <<...>> entry into page resources
- \cs_gset:Nn\pbs_insert_properties_entry:{
+ \cs_gset_protected:Nn\pbs_insert_properties_entry:{
\pbs_zap_properties: %purge those from previous page
\tl_set:Nx\l_tmpa_tl{\seq_if_exist:cT{pbs@props@\int_use:N\g_pbs_page_int}{
\seq_use:cn{pbs@props@\int_use:N\g_pbs_page_int}{~}}}
@@ -677,7 +707,7 @@
/Properties~<</rm@oc\int_use:N\g_pbs_oc_int\space#2>>>>}
\int_gincr:N\g_pbs_oc_int
}
- \cs_new_nopar:Nn\pbs_pdfemc:{\special{pdf:code~EMC}}
+ \cs_new_protected_nopar:Nn\pbs_pdfemc:{\special{pdf:code~EMC}}
}{
\bool_if:NTF\g_pbs_dvisvgm_bool{
\tl_gset:Nx\g_pbs_hash_tl{\token_to_str:N#}
@@ -1242,7 +1272,7 @@
}
}
}
- \cs_new_nopar:Nn\pbs_pdfemc:{\pbs_special:n{~mark~/EMC~pdfmark}}
+ \cs_new_protected_nopar:Nn\pbs_pdfemc:{\pbs_special:n{~mark~/EMC~pdfmark}}
}
}
}
@@ -1275,7 +1305,7 @@
%modify output routine for output box insertions
\bool_new:N\l_pbs_is_vertical_bool
\cs_set_eq:NN\pbs_outputpage_orig:\@outputpage
-\cs_set_nopar:Npn\@outputpage{
+\cs_set_protected_nopar:Npn\@outputpage{
\int_gincr:N\g_pbs_page_int
\box_if_vertical:cTF{@outputbox}{
\bool_set_true:N\l_pbs_is_vertical_bool
@@ -1295,10 +1325,6 @@
\pbs_outputpage_orig:
}
-\bool_new:N\g_pbs_ocgbase_loaded_bool
-\AtBeginDocument{
- \@ifpackageloaded{ocgbase}{\bool_gset_true:N\g_pbs_ocgbase_loaded_bool}{}
-}
\AddToHook{shipout/foreground}{
%insert /Properties into current page's resources
\put(0,0){\pbs_insert_properties_entry:}
@@ -1513,15 +1539,95 @@
%
% The Current Maintainer of this work is A. Grahn.
-\RequirePackage{l3keys2e}
+\def\g@pbs@date@tl{2022/08/04}
+\def\g@pbs@version@tl{0.55}
-\def\g@pbs@date@tl{2022/03/18}
-\def\g@pbs@version@tl{0.54}
-
-\NeedsTeXFormat{LaTeX2e}[2020-10-01]
+\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplPackage{pdfbase}{\g@pbs@date@tl}{\g@pbs@version@tl}
{driver independent access to low-level PDF features}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% package options
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\msg_gset:nnnn{pdfbase}{unknown~package~option}{Unknown~package~option~`#1'.}{
+ Package option~'#1'~is~unknown;\\
+ perhaps~it~is~spelled~incorrectly.
+}
+
+\bool_new:N\g_pbs_pkgbigfiles_bool
+\bool_new:N\g_pbs_dvipdfmx_bool
+\bool_new:N\g_pbs_dvisvgm_bool
+\str_new:N\g_pbs_backend_str
+
+\keys_define:nn{pdfbase}{
+ pdftex.code:n = {},
+ pdftex.value_forbidden:n = true,
+
+ luatex.code:n = {},
+ luatex.value_forbidden:n = true,
+
+ xetex.code:n = {},
+ xetex.value_forbidden:n = true,
+
+ dvips.code:n = {},
+ dvips.value_forbidden:n = true,
+
+ dvipdfmx .code:n = {
+ \str_gset:Nn\g_pbs_backend_str{dvipdfmx}
+ },
+ dvipdfmx .value_forbidden:n = true,
+
+ dvisvgm .code:n = {
+ \str_gset:Nn\g_pbs_backend_str{dvisvgm}
+ },
+ dvisvgm .value_forbidden:n = true,
+
+ bigfiles .bool_gset:N = \g_pbs_pkgbigfiles_bool,
+
+ unknown .code:n = {
+ \msg_error:nnx{pdfbase}{unknown~package~option}{\l_keys_key_tl}
+ }
+}
+\ProcessKeyOptions[pdfbase]
+
+% ensure that backend code is loaded
+% possible values for \c_sys_backend_str: pdftex, luatex, xetex, dvips, dvipdfmx, dvisvgm
+\cs_if_exist:NF\c_sys_backend_str{\sys_load_backend:n{}}
+
+\sys_if_output_pdf:TF{ % this excludes dvipdfmx, dvisvgm
+ \bool_gset_false:N\g_pbs_dvipdfmx_bool
+ \bool_gset_false:N\g_pbs_dvisvgm_bool
+}{
+ \str_case_e:nnF{\g_pbs_backend_str}{ % pdfbase options have precedence
+ {dvipdfmx}{
+ \bool_gset_true:N\g_pbs_dvipdfmx_bool
+ \bool_gset_false:N\g_pbs_dvisvgm_bool
+ }
+ {dvisvgm}{
+ \bool_gset_false:N\g_pbs_dvipdfmx_bool
+ \bool_gset_true:N\g_pbs_dvisvgm_bool
+ }
+ }{ % otherwise let the L3 backend code decide
+ \str_case_e:nn{\c_sys_backend_str}{
+ {dvisvgm}{
+ \bool_gset_false:N\g_pbs_dvipdfmx_bool
+ \bool_gset_true:N\g_pbs_dvisvgm_bool
+ }
+ {dvipdfmx}{
+ \bool_gset_true:N\g_pbs_dvipdfmx_bool
+ \bool_gset_false:N\g_pbs_dvisvgm_bool
+ }
+ }
+ }
+}
+
+\sys_if_engine_xetex:T{
+ \bool_if:NF\g_pbs_dvisvgm_bool{\bool_gset_true:N\g_pbs_dvipdfmx_bool}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
\int_new:N\g_pbs_page_int %abs. page counter
%creating global definitions
@@ -1529,8 +1635,7 @@
\msg_set:nnn{pdfbase}{rerun}{Rerun~to~get~internal~references~right!}
-%LaTeX2e wrapper
-\cs_new_nopar:Npn\pbs@seq@push@cx#1#2{
+\cs_new_protected_nopar:Npn\pbs@seq@push@cx#1#2{
\seq_if_exist:cF{#1}{\seq_new:c{#1}}
\seq_gput_right:cx{#1}{#2}
}
@@ -1548,6 +1653,8 @@
\seq_new:N\g_pbs_bop_seq
\seq_new:N\g_pbs_eop_seq
+\bool_new:N\g_pbs_lscape_bool %if we are inside landscape env
+\bool_new:N\g_pbs_ocgbase_loaded_bool
\AtBeginDocument{
\iow_now:Nx\@mainaux{
\token_to_str:N\providecommand\token_to_str:N\pbs@newkey[2]{}
@@ -1555,66 +1662,14 @@
\iow_now:Nx\@mainaux{
\token_to_str:N\providecommand\token_to_str:N\pbs@seq@push@cx[2]{}
}
-}
-
-%%%%%%%%%%%%%%%%%
-%package options
-%%%%%%%%%%%%%%%%%
-%unknown package option error message
-\msg_gset:nnnn{pdfbase}{unknown~package~option}{Unknown~package~option~`#1'.}{
- Package option~'#1'~is~unknown;\\
- perhaps~it~is~spelled~incorrectly.
-}
-
-\bool_new:N\g_pbs_pkgbigfiles_bool
-\bool_new:N\g_pbs_dvipdfmx_bool
-\bool_new:N\g_pbs_dvisvgm_bool
-\bool_new:N\g_pbs_lscape_bool %if we are inside landscape env
-\AtBeginDocument{
\cs_if_exist:NT\landscape{%
\tl_put_right:Nn\landscape{\bool_gset_true:N\g_pbs_lscape_bool}
\tl_put_left:Nn\endlandscape{\bool_gset_false:N\g_pbs_lscape_bool}
}
+ \@ifpackageloaded{ocgbase}{\bool_gset_true:N\g_pbs_ocgbase_loaded_bool}{}
}
-\keys_define:nn{pdfbase}{
- xetex .code:n = {}, %dummy, we use engine test instead
-
- dvipdfmx .choice:,
- dvipdfmx / true .code:n = {
- \bool_gset_true:N\g_pbs_dvipdfmx_bool
- \bool_gset_false:N\g_pbs_dvisvgm_bool
- },
- dvipdfmx / false .code:n = {\bool_gset_false:N\g_pbs_dvipdfmx_bool},
- dvipdfmx .default:n = {true},
-
- dvisvgm .choice:,
- dvisvgm / true .code:n = {
- \bool_gset_true:N\g_pbs_dvisvgm_bool
- \bool_gset_false:N\g_pbs_dvipdfmx_bool
- },
- dvisvgm / false .code:n = {\bool_gset_false:N\g_pbs_dvisvgm_bool},
- dvisvgm .default:n = {true},
-
- bigfiles .bool_gset:N = \g_pbs_pkgbigfiles_bool,
-
- unknown .code:n = {
- \msg_error:nnx{pdfbase}{unknown~package~option}{\l_keys_key_tl}
- }
-}
-\ProcessKeysOptions{pdfbase}
-
-\sys_if_output_pdf:T{
- \bool_gset_false:N\g_pbs_dvipdfmx_bool
- \bool_gset_false:N\g_pbs_dvisvgm_bool
-}
-
-\sys_if_engine_xetex:T{
- \bool_if:NF\g_pbs_dvisvgm_bool{\bool_gset_true:N\g_pbs_dvipdfmx_bool}
-}
-
-% writing to core objects in the PDF, using the new
-% pdfmanagement interface
+% writing to core objects in the PDF, using the new pdfmanagement interface
\cs_new_protected_nopar:Nn\pbs_appendtofields:n{
\pdfmanagement_add:nnx{Catalog/AcroForm}{Fields}{#1}
}
@@ -1629,7 +1684,6 @@
}{
!\int_compare_p:n{\luatexversion<95}
}{
- \cs_set:Npx\pdfpageresources{\pdfvariable~pageresources}
\cs_set_protected:Npn\pdfobj{\pdfextension~obj~}
\cs_set_protected:Npn\pdfrefobj{\pdfextension~refobj~}
\cs_set_protected:Npn\pdfannot{\pdfextension~annot~}
@@ -1641,6 +1695,7 @@
\cs_set_protected:Npn\pdflastobj{\numexpr\pdffeedback~lastobj\relax}
\cs_set_protected:Npn\pdflastannot{\numexpr\pdffeedback~lastannot\relax}
\cs_set:Npn\pdfpageref{\pdffeedback~pageref}
+ \cs_set_protected:Npx\pdfpageresources{\pdfvariable~pageresources}
\cs_set_eq:NN\pdfximage\saveimageresource
\cs_set_eq:NN\pdfrefximage\useimageresource
\cs_set_eq:NN\pdflastximage\lastsavedimageresourceindex
@@ -2558,7 +2613,7 @@
%modify output routine for output box insertions
\bool_new:N\l_pbs_is_vertical_bool
\cs_set_eq:NN\pbs_outputpage_orig:\@outputpage
-\cs_set_nopar:Npn\@outputpage{
+\cs_set_protected_nopar:Npn\@outputpage{
\int_gincr:N\g_pbs_page_int
\box_if_vertical:cTF{@outputbox}{
\bool_set_true:N\l_pbs_is_vertical_bool
@@ -2578,10 +2633,6 @@
\pbs_outputpage_orig:
}
-\bool_new:N\g_pbs_ocgbase_loaded_bool
-\AtBeginDocument{
- \@ifpackageloaded{ocgbase}{\bool_gset_true:N\g_pbs_ocgbase_loaded_bool}{}
-}
\AddToHook{shipout/background}{
% workaround for curious AR bug (pdf annot or link placed on
% OCG remains active although OCG is hidden)