%%
%% This is file `l3backend-testphase-dvips.def',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% l3backend-testphase.dtx  (with options: `drivers,dvips')
%% 
%% Copyright (C) 2019-2021 The LaTeX Project
%% 
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version.  The latest
%% version of this license is in the file:
%% 
%%    https://www.latex-project.org/lppl.txt
%% 
%% This file is part of the "LaTeX PDF management testphase bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%% 
%% File: l3backend-testphase.dtx
\ProvidesExplFile
  {l3backend-testphase-dvips.def}{2025-03-26}{}
  {LaTeX~PDF~management~testphase~bundle~backend~support: dvips}
\cs_generate_variant:Nn \__kernel_backend_postscript:n { e }
\cs_generate_variant:Nn \__pdf_backend_pdfmark:n { e }
\bool_if:NT \l__pdfmanagement_delayed_shipout_bool
 {
   \cs_new_protected:Npn \__kernel_backend_shipout_literal:e #1
     { \tex_special:D~shipout { #1} }
 }

\cs_new_protected:Npn \__pdf_backend_record_abspage:n #1
  {
     \@bsphack
     \property_record:nn{#1}{abspage}
     \@esphack
  }
\cs_new:Npn \__pdf_backend_ref_abspage:n #1
  {
     \property_ref:nn{#1}{abspage}
  }

\cs_generate_variant:Nn \__pdf_backend_record_abspage:n {e}
\cs_generate_variant:Nn \__pdf_backend_ref_abspage:n {e}
\prop_new:N \g__pdf_tmpa_prop
\tl_new:N   \l__pdf_tmpa_tl
\box_new:N  \l__pdf_backend_tmpa_box
\box_new:N  \l__pdf_backend_tmpb_box

\int_new:N \g__pdf_backend_resourceid_int
\int_new:N \g__pdf_backend_name_int
\int_new:N \g__pdf_backend_page_int
\cs_new:Npn \__kernel_pdf_name_from_unicode_e:n #1
  {
    ~ ( \text_expand:n { #1 } ) ~ cvn
  }
\tl_gput_right:Nn\@kernel@after@shipout@lastpage
  {
    \g__kernel_pdfmanagement_end_run_code_tl
  }
\tl_if_exist:NTF \@kernel@after@shipout@background
  {
    \g@addto@macro \@kernel@before@shipout@background{\relax}
    \g@addto@macro \@kernel@after@shipout@background
      {
        \g__kernel_pdfmanagement_thispage_shipout_code_tl
      }
  }
  {
    \hook_gput_code:nnn{shipout/background}{pdf}
      {
        \g__kernel_pdfmanagement_thispage_shipout_code_tl
      }
  }

\cs_new_protected:Npx \__pdf_backend_Pages_primitive:n #1
  {
    \tex_special:D{ps:~[#1~/PAGES~pdfmark} %]
  }
\cs_new_protected:Npn \__pdf_backend_Page_primitive:n #1
   {
     \tex_special:D{ps:~[{ThisPage}<<#1>>~/PUT~pdfmark} %]
   }
  % the command to store default values.
  % Uses a prop with pdflatex + dvi,
  % sets a lua table with lualatex
\cs_new_protected:Npn \__pdf_backend_Page_gput:nn #1 #2
   {
     \pdfdict_gput:nnn {g__pdf_Core/Page}{ #1 }{ #2 }
   }
  % the command to remove a default value.
  % Uses a prop with pdflatex + dvi,
  % changes a lua table with lualatex
\cs_new_protected:Npn \__pdf_backend_Page_gremove:n #1
  {
    \pdfdict_gremove:nn  {g__pdf_Core/Page}{ #1 }
  }
  % the command used in the document.
  % direct call of the primitive special with dvips/dvipdfmx
  % \latelua: fill a page related table with lualatex, merge it with the page
  % table and push it directly
  % write to aux and store in prop with pdflatex
\cs_new_protected:Npn \__pdf_backend_ThisPage_gput:nn #1 #2
  {
    \__pdf_backend_Page_primitive:n { /#1~#2 }
  }
  %the code to push the values, used in shipout
  %merges the two props and then fills the register in pdflatex
  %merges the two tables (the one is probably still empty)
  %and then fills (in lua) in luatex
  %issues the values stored in the global prop with dvi
\cs_new_protected:Npn \__pdf_backend_ThisPage_gpush:n #1
  {
    \__pdf_backend_Page_primitive:e
      { \pdfdict_use:n { g__pdf_Core/Page} }
  }
\cs_generate_variant:Nn \__pdf_backend_Page_primitive:n { e }
\clist_const:Nn \c__pdf_backend_PageResources_clist
  {
    ExtGState,
    ColorSpace,
    Pattern,
    Shading,
  }
\cs_new_protected:Npn \__pdf_backend_PageResources:n #1 {}
\cs_new_protected:Npn \__pdf_backend_PageResources_gput:nnn #1 #2 #3
  { %only for the show command TEST!!
    \pdfdict_gput:nnn {g__pdf_Core/Page/Resources/#1} { #2 }{ #3 }
  }
\cs_new_protected:Npn \__pdf_backend_PageResources_obj_gpush: {}
\bool_new:N \l__pdf_backend_xform_bool
\cs_set_protected:Npn \__pdf_backend_bdc:nn #1 #2 % #1 eg. Span, #2: dict_content
  {
    \__pdf_backend_pdfmark:n{/#1~<<#2>>~/BDC}
  }
\cs_set_eq:NN \__pdf_backend_bdc_contobj:nn    \__pdf_backend_bdc:nn
\cs_set_eq:NN \__pdf_backend_bdc_contstream:nn \__pdf_backend_bdc:nn

\bool_if:NT\l__pdfmanagement_delayed_shipout_bool
  {
    \cs_new_protected:Npn \__pdf_backend_bdc_shipout:ee #1 #2 % #1 eg. Span, #2: dict_content
      {
        \__kernel_backend_shipout_literal:e
          {ps: SDict ~ begin ~ mark /#1~<<#2>>~/BDC ~ pdfmark ~ end }
      }
  }

\cs_set_protected:Npn \__pdf_backend_bdcobject:nn #1 #2 % #1 eg. Span, #2: object name
  {
    \__pdf_backend_pdfmark:e{/#1~\pdf_object_ref:n{#2}~/BDC}
  }
\cs_set_protected:Npn \__pdf_backend_bdcobject:n #1  % #1 eg. Span,
  {
    \__pdf_backend_pdfmark:e{/#1~\__pdf_backend_object_last:~/BDC}
  }
\cs_set_protected:Npn \__pdf_backend_emc:
  {
    \__pdf_backend_pdfmark:n{/EMC} %
  }
\cs_set_protected:Npn \__pdf_backend_bmc:n #1
  {
    \__pdf_backend_pdfmark:n{/#1~/BMC} %
  }
\cs_new_protected:Npn \__pdf_backend_PageResources_gpush:n #1 {}


\cs_new_protected:Npn \__pdf_backend_Names_gpush:nn #1 #2  {}
\cs_new_protected:Npn  \__pdf_backend_NamesEmbeddedFiles_add:nn #1 #2
      {
        \__pdf_backend_pdfmark:e
          {
            /Name~#1~
            /FS~#2~
            /EMBED
          }
      }
\cs_if_free:NT \__pdf_backend_link_off:
 {
   \cs_new_protected:Npn \__pdf_backend_link_off:{}
   \cs_new_protected:Npn \__pdf_backend_link_on: {}
 }
\tl_new:N \l__pdf_backend_xform_tmpwd_tl
\tl_new:N \l__pdf_backend_xform_tmpdp_tl
\tl_new:N \l__pdf_backend_xform_tmpht_tl
\cs_new_protected:Npn\__pdf_backend_xform_new:nnnn #1 #2 #3 #4 % #1 name, #2 attribute, #4  content
  {
    \int_gincr:N \g__pdf_backend_object_int
    \int_const:cn
      { c__pdf_backend_xform_ \tl_to_str:n {#1} _int }
      { \g__pdf_backend_object_int }

    \hbox_set:Nn \l__pdf_backend_tmpa_box
      {
        \bool_set_true:N \l__pdf_backend_xform_bool
        \prop_gclear:c {\__kernel_pdfdict_name:n { g__pdf_Core/Xform/Resources/Properties }}
        #4
      }
   %store the dimensions
    \tl_const:ce
      { c__pdf_backend_xform_wd_ \tl_to_str:n {#1} _tl }
      { \tex_the:D \box_wd:N \l__pdf_backend_tmpa_box }
    \tl_const:ce
      { c__pdf_backend_xform_ht_ \tl_to_str:n {#1} _tl }
      { \tex_the:D \box_ht:N \l__pdf_backend_tmpa_box }
    \tl_const:ce
      { c__pdf_backend_xform_dp_ \tl_to_str:n {#1} _tl }
      { \tex_the:D \box_dp:N \l__pdf_backend_tmpa_box }
   %store content dimensions in DPI units (Dots) (code from issue 25)
    \tl_set:Ne\l__pdf_backend_xform_tmpwd_tl
      {
        \dim_to_decimal_in_sp:n{ \box_wd:N \l__pdf_backend_tmpa_box }~
        65536~div~72.27~div~DVImag~mul~Resolution~mul~
      }
    \tl_set:Ne\l__pdf_backend_xform_tmpht_tl
      {
        \dim_to_decimal_in_sp:n{ \box_ht:N \l__pdf_backend_tmpa_box }~
        65536~div~72.27~div~DVImag~mul~VResolution~mul~
      }
    \tl_set:Ne\l__pdf_backend_xform_tmpdp_tl
      {
        \dim_to_decimal_in_sp:n{ \box_dp:N \l__pdf_backend_tmpa_box }~
        65536~div~72.27~div~DVImag~mul~VResolution~mul~
      }
    % mirror the box
    %\box_scale:Nnn \l__pdf_backend_tmpa_box {1} {-1}
    \hbox_set:Nn\l__pdf_backend_tmpb_box
      {
        \__kernel_backend_postscript:e
          {
            gsave~currentpoint~
            initclip~ % restore default clipping path (page device/whole page)
            clippath~pathbbox~newpath~pop~pop~
            \tl_use:N\l__pdf_backend_xform_tmpdp_tl~add~translate~
            mark~
              /_objdef~{ pdf.obj \int_use:N\g__pdf_backend_object_int }\c_space_tl~
              /BBox[
                0~
                \tl_use:N\l__pdf_backend_xform_tmpht_tl~
                \tl_use:N\l__pdf_backend_xform_tmpwd_tl~
                \tl_use:N\l__pdf_backend_xform_tmpdp_tl~
                neg
              ]
              \str_if_eq:eeF{#1}{}
               {
                 product~(Distiller)~search~{pop~pop~pop~#2}{pop}ifelse~
               }
            /BP~pdfmark~1~-1~scale~neg~exch~neg~exch~translate
          }
        \box_use_drop:N\l__pdf_backend_tmpa_box
        \__kernel_backend_postscript:n
          {
            mark ~ /EP~pdfmark  ~ grestore
          }
       \str_if_eq:eeF{#1}{}
         {
           \__kernel_backend_postscript:e
             {
               product~(Ghostscript)~search~
                {
                  pop~pop~pop~
                  mark~
                  { pdf.obj \int_use:c{c__pdf_backend_xform_ \tl_to_str:n {#1} _int} }
                    ~<<#2>>~/PUT~pdfmark
                 }{pop}ifelse
              }
          }
      }
    \box_set_dp:Nn \l__pdf_backend_tmpb_box { \c_zero_dim }
    \box_set_ht:Nn \l__pdf_backend_tmpb_box { \c_zero_dim }
    \box_set_wd:Nn \l__pdf_backend_tmpb_box { \c_zero_dim }
    \hook_gput_code:nnn {begindocument/end}{pdfxform}
      {
       \mode_leave_vertical:
       \box_use:N\l__pdf_backend_tmpb_box
      }
  }

\cs_new_protected:Npn \__pdf_backend_xform_use:n #1
  {
    \hbox_set:Nn \l__pdf_backend_tmpa_box
      {
        \__kernel_backend_postscript:e
         {
           gsave~currentpoint~translate~1~-1~scale~
           mark~{ pdf.obj \int_use:c{c__pdf_backend_xform_ \tl_to_str:n {#1} _int }}~
          /SP~pdfmark ~ grestore
         }
      }
    \box_set_wd:Nn  \l__pdf_backend_tmpa_box { \pdfxform_wd:n { #1 } }
    \box_set_ht:Nn  \l__pdf_backend_tmpa_box { \pdfxform_ht:n { #1 } }
    \box_set_dp:Nn  \l__pdf_backend_tmpa_box { \pdfxform_dp:n { #1 } }
    \box_use_drop:N \l__pdf_backend_tmpa_box
  }
\cs_new:Npn \__pdf_backend_xform_ref:n #1
  {
    { pdf.obj \int_use:c{c__pdf_backend_xform_ \tl_to_str:n {#1} _int} }
  }

%% all
\prg_new_conditional:Npnn \__pdf_backend_xform_if_exist:n #1 { p , T , F , TF }
  {
    \int_if_exist:cTF { c__pdf_backend_xform_ \tl_to_str:n {#1} _int }
     { \prg_return_true: }
     { \prg_return_false:}
  }
\prg_new_eq_conditional:NNn \pdfxform_if_exist:n\__pdf_backend_xform_if_exist:n
  { TF , T , F , p }
\tl_new:N   \l_pdf_current_structure_destination_tl
\cs_new_protected:Npn \pdf_activate_structure_destination:
 {
   \cs_gset_eq:NN \__pdf_backend_destination:nn       \__pdf_backend_structure_destination:nn
   \cs_gset_eq:NN \__pdf_backend_destination:nnnn     \__pdf_backend_structure_destination:nnnn
   \cs_gset_eq:NN \__pdf_backend_link_begin_goto:nnw  \__pdf_backend_link_begin_structure_goto:nnw
 }
\cs_new_protected:Npn \pdf_activate_indexed_structure_destination:
 {
   \cs_gset_eq:NN \__pdf_backend_destination:nn       \__pdf_backend_indexed_structure_destination:nn
   \cs_gset_eq:NN \__pdf_backend_destination:nnnn     \__pdf_backend_indexed_structure_destination:nnnn
   \cs_gset_eq:NN \__pdf_backend_link_begin_goto:nnw  \__pdf_backend_link_begin_structure_goto:nnw
 }
\cs_set_eq:NN \__pdf_backend_structure_destination:nn       \__pdf_backend_destination:nn
\cs_set_eq:NN \__pdf_backend_structure_destination:nnnn     \__pdf_backend_destination:nnnn
\cs_set_eq:NN \__pdf_backend_link_begin_structure_goto:nnw  \__pdf_backend_link_begin_goto:nnw
\cs_set_eq:NN \__pdf_backend_indexed_structure_destination:nn       \__pdf_backend_destination:nn
\cs_set_eq:NN \__pdf_backend_indexed_structure_destination:nnnn     \__pdf_backend_destination:nnnn
\cs_new_protected:Npn \__pdf_backend_set_regression_data:
  {
    \sys_gset_rand_seed:n{1000}
    \pdfmanagement_add:nnn{Info}{Creator}{(TeX)}
    \AddToHook{begindocument}{\pdfmanagement_add:nnn{Info}{Producer}{(pdfTeX+dvips)}}
    \__kernel_backend_literal:e{!~<</DocumentUUID~(DocumentUUID)>>~setpagedevice}
    \__kernel_backend_literal:e{!~<</InstanceUUID~(InstanceUUID)>>~setpagedevice}
    \pdfmanagement_add:nne{Info}{CreationDate}{(\c_sys_timestamp_str)}
    \pdfmanagement_add:nne{Info}{ModDate}{(\c_sys_timestamp_str)}
    \pdfdict_put:nne  {l_pdffile/Params} {ModDate}{(\c_sys_timestamp_str)}
    \AddToDocumentProperties[hyperref]{pdfinstanceid}{uuid:0a57c455-157a-4141-8c19-6237d832fc80}
    \AddToDocumentProperties[hyperref]{pdfproducer}{\c_sys_engine_exec_str-NN.NN.NN}
   }
\cs_new_protected:Npn \__pdf_backend_metadata_stream:n #1
  {
    \pdf_object_unnamed_write:nn {stream}{{/Type~/Metadata~/Subtype~/XML}{#1}}
  }
\cs_new_protected:Npn \__pdf_backend_omit_charset:n #1 {} %#1 number
\cs_new_protected:Npn \__pdf_backend_omit_info:n #1 {} %#1 number
\cs_new_protected:Npn \__pdf_backend_omit_cidset:n #1 {} %#1 number

%% 
%%
%% End of file `l3backend-testphase-dvips.def'.
