\ProvidesExplFile {tagpdf-pdftex.def} {2019/07/02} {0.61}
  {tagpdf~driver~for~pdftex}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% driver (pdflatex) commands
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% these should be in expl3!!!
\cs_new:Nn \__uftag_pdf_startlink:{ \pdfstartlink }
\cs_new:Nn \__uftag_pdf_endlink:  { \pdfendlink }
\cs_new:Nn \__uftag_pdf_lastlink:  { \pdflastlink }
\cs_new:Nn \__uftag_pdf_catalog:  { \pdfcatalog }


% needed for \str_set_convert:Nnon
\tl_new:N \g__uftag_inputencoding_tl
\tl_gset:Nn \g__uftag_inputencoding_tl {utf8}


%literal
\cs_new:Nn  \__uftag_pdfliteral_page:n { \__uftag_tex_pdfliteral:D page { #1} }
\cs_new:Nn  \__uftag_pdfcatalog:n      { \__uftag_tex_pdfcatalog:D { #1 } }

% reserve an object num and store the number
\cs_new:Nn \__uftag_pdfreserveobjnum:N % #1 = macro name to be populated with object number
 {
  \__uftag_tex_pdfobj:D reserveobjnum
  \tl_set:Nx #1 { \int_use:N \__uftag_tex_pdflastobj:D }%
 }

% add content to an object num stored in a macro
\cs_new:Nn \__uftag_pdfuseobjnum:Nn
 {
 % #1 = macro containing the object number
 % #2 = object contents, as valid PDF
 % should #2 be filtered through  \pdfstringdef  ???
  \__uftag_tex_immediate:D \__uftag_tex_pdfobj:D useobjnum~#1~{#2}%
 }

\cs_new:Nn \__uftag_pdfuseobjnum:nn
 {
 % #1 = a number the object number
 % #2 = object contents, as valid PDF
 % should #2 be filtered through  \pdfstringdef  ???
  \__uftag_check_record_pdfobj_num:n {#1}
  \__uftag_tex_immediate:D \__uftag_tex_pdfobj:D useobjnum~#1~{#2}%
 }

% obj num of the dictionary for a page:
% the page count starts by 1
% pages can referenced before they are actually created
% no error if the page later doesn't exist
\cs_new:Nn \__uftag_store_pdfpageref:Nn
 {
 % #1 = macro name to be populated with current page object number
 % #2 = number or counter identifying the required page
  \tl_set:Nx #1 { \__uftag_tex_pdfpageref:D #2}%
 }

% a global version of the command
\cs_new:Nn \__uftag_gstore_pdfpageref:Nn
 {
  \tl_gset:Nx #1 { \__uftag_tex_pdfpageref:D #2}%
 }

\cs_new:Nn \__uftag_pdfobj:Nn
 {
 % #1 = macro name to refer to this object
 % #2 = object contents, as valid PDF
 % should #2 be filtered through  \pdfstringdef  ???
  \__uftag_tex_immediate:D \__uftag_tex_pdfobj:D { #2 }
  \tl_set:Nx #1 {\int_use:N \__uftag_tex_pdflastobj:D }%
 }

%  pdfpage**s**attr: for all pages
%% is global needed? Yes. Without it the setting is lost if issued in a group
%
\cs_new:Nn \__uftag_gset_pdfpagesattr:n
 {
  \__uftag_tex_global:D \__uftag_tex_pdfpagesattr:D { #1 }
 }

\cs_new:Nn \__uftag_gadd_pdfpagesattr:n
 {
  \exp_args:No \__uftag_gset_pdfpagesattr:n { \__uftag_tex_the:D \__uftag_tex_pdfpagesattr:D #1 }
 }

% pdfpageattr for one page
% I must avoid to overwrite other entries,
% And I must avoid to add more and more /StructParens
% do we need an immediate version??
\cs_new:Nn \__uftag_gset_pdfpageattr:n
 {
  \__uftag_tex_global:D \__uftag_tex_pdfpageattr:D  { #1 }
 }

\cs_new:Nn \__uftag_gadd_pdfpageattr:n
 {
   \exp_args:No \__uftag_gset_pdfpageattr:n { \__uftag_tex_the:D \__uftag_tex_pdfpageattr:D #1}
 }

\cs_new:Nn \__uftag_get_pdfpageattr:N
 {
  \tl_set:No #1 { \__uftag_tex_the:D \__uftag_tex_pdfpageattr:D }
 }


% These commands are only aliases for pdflatex but are defined differently with luatex
% to get also lua tables.
\cs_set_eq:NN \__uftag_prop_new:N     \prop_new:N

\cs_set_eq:NN \__uftag_seq_new:N      \seq_new:N

\cs_set_eq:NN \__uftag_prop_gput:Nnn  \prop_gput:Nnn

\cs_set_eq:NN \__uftag_seq_gput_right:Nn \seq_gput_right:Nn

\cs_set_eq:NN \__uftag_seq_item:cn    \seq_item:cn

\cs_set_eq:NN \__uftag_prop_item:cn   \prop_item:cn

\cs_set_eq:NN \__uftag_seq_show:N     \seq_show:N

\cs_set_eq:NN \__uftag_prop_show:N    \prop_show:N



\endinput
