diff options
Diffstat (limited to 'macros/latex/contrib/tagpdf/tagpdf-attr-code.sty')
-rw-r--r-- | macros/latex/contrib/tagpdf/tagpdf-attr-code.sty | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/macros/latex/contrib/tagpdf/tagpdf-attr-code.sty b/macros/latex/contrib/tagpdf/tagpdf-attr-code.sty new file mode 100644 index 0000000000..9bb57f2bb3 --- /dev/null +++ b/macros/latex/contrib/tagpdf/tagpdf-attr-code.sty @@ -0,0 +1,110 @@ +\ProvidesExplPackage {tagpdf-attr-code} {2019/07/02} {0.61} + {part of tagpdf - code related to attributes and attribute classes} + +% the obj is written in tagpdf-tree-code. + +\seq_new:N \g__uftag_attr_class_used_seq +\prop_new:N \g__uftag_attr_objnum_prop %will contain obj num of used attributes + +\prop_new:N \g__uftag_attr_entries_prop +\tl_new:N \g__uftag_attr_class_content_tl +\tl_new:N \l__uftag_attr_objtmp_tl +\tl_new:N \l__uftag_attr_value_tl + + +\cs_new_protected:Nn \__uftag_attr_new_entry:nn %#1:name, #2: content + { + \prop_gput:Nnn \g__uftag_attr_entries_prop + {#1}{#2} + } + +\keys_define:nn { uftag / setup } + { + newattribute .code:n = + { + \__uftag_attr_new_entry:nn #1 + } + } + + +% the key for the structure: +\keys_define:nn { uftag / struct } +{ + attribute-class .code:n = + { + \clist_set:No \l_tmpa_clist { #1 } + \seq_set_from_clist:NN \l_tmpa_seq \l_tmpa_clist + \seq_map_inline:Nn \l_tmpa_seq + { + \prop_if_in:NnF \g__uftag_attr_entries_prop {##1} + { + \msg_error:nnn { uftag } { attr-unknown } { ##1 } + } + \seq_gput_left:Nn\g__uftag_attr_class_used_seq { ##1} + } + \seq_set_map:NNn \l_tmpb_seq \l_tmpa_seq + { + /##1 + } + \tl_set:Nx \l_tmpa_tl + { + \int_compare:nT { \seq_count:N \l_tmpa_seq > 1 }{[} + \seq_use:Nn \l_tmpb_seq { \c_space_tl } + \int_compare:nT { \seq_count:N \l_tmpa_seq > 1 }{]} + } + \int_compare:nT { \seq_count:N \l_tmpa_seq > 0 } + { + \__uftag_prop_gput:cnx + { g__uftag_struct_\int_eval:n {\c@g__uftag_struct_abs_int}_prop } + { C } + { \l_tmpa_tl } + %\prop_show:c { g__uftag_struct_\int_eval:n {\c@g__uftag_struct_abs_int}_prop } + } + } +} + +\keys_define:nn { uftag / struct } + { + attribute .code:n = % A property (attribute, value currently a dictionary) + { + \clist_set:No \l_tmpa_clist { #1 } + \seq_set_from_clist:NN \l_tmpa_seq \l_tmpa_clist + \tl_set:Nx \l__uftag_attr_value_tl + { + \int_compare:nT { \seq_count:N \l_tmpa_seq > 1 }{[} + } + \seq_map_inline:Nn \l_tmpa_seq + { + \prop_if_in:NnF \g__uftag_attr_entries_prop {##1} + { + \msg_error:nnn { uftag } { attr-unknown } { ##1 } + } + \prop_if_in:NnF \g__uftag_attr_objnum_prop {##1} + { + \__uftag_pdfreserveobjnum:N \l_tmpa_tl + \__uftag_pdfuseobjnum:Nx \l_tmpa_tl + { + \prop_item:Nn\g__uftag_attr_entries_prop {##1} + } + \prop_gput:NnV \g__uftag_attr_objnum_prop {##1} {\l_tmpa_tl} + } + \tl_put_right:Nx \l__uftag_attr_value_tl + { + \c_space_tl + \prop_item:Nn \g__uftag_attr_objnum_prop {##1} + \c_space_tl 0 \c_space_tl R + } + % \tl_show:N \l__uftag_attr_value_tl + } + \tl_put_right:Nx \l__uftag_attr_value_tl + { + \int_compare:nT { \seq_count:N \l_tmpa_seq > 1 }{]} + } + % \tl_show:N \l__uftag_attr_value_tl + \__uftag_prop_gput:cnx + { g__uftag_struct_\int_eval:n {\c@g__uftag_struct_abs_int}_prop } + { A } + { \l__uftag_attr_value_tl } + }, + } +\endinput |